Npm 如何在我的package.json中添加自定义脚本

Npm 如何在我的package.json中添加自定义脚本,npm,deployment,package.json,npm-scripts,Npm,Deployment,Package.json,Npm Scripts,我想添加一个名为deploy的自定义命令,它接受一个参数(AU/EU/US/NZ)。我的应用程序有4个实例,1个在非洲,1个在新西兰,1个在美国,1个在欧盟-德国。当我想部署我的应用程序时,我必须做以下三件事: 更改代码中的一些常量 执行npm运行构建 scp我的文件到我想要的服务器:/location 我想做的是基本上运行一个命令,比如npm run deploy--region=AU,并自动执行所有3个步骤 这实际上会在每次部署更新时为我节省大量时间(10-15分钟)。我通过向我的包.jso

我想添加一个名为
deploy
的自定义命令,它接受一个参数(AU/EU/US/NZ)。我的应用程序有4个实例,1个在非洲,1个在新西兰,1个在美国,1个在欧盟-德国。当我想部署我的应用程序时,我必须做以下三件事:

  • 更改代码中的一些常量
  • 执行
    npm运行构建
  • scp我的文件到我想要的服务器:/location
  • 我想做的是基本上运行一个命令,比如
    npm run deploy--region=AU
    ,并自动执行所有3个步骤


    这实际上会在每次部署更新时为我节省大量时间(10-15分钟)。

    我通过向我的
    包.json添加5个新属性解决了这个问题。这些属性中的每一个都包含关于不同api/静态URL、该实例的站点设置等的信息

    5个实例中有4个是针对每个区域的,其中1个是选定的,因此我有
    AU
    US
    NZ
    DEMO
    选定的

    接下来,我创建了一个
    deploy.js
    文件并添加了以下代码:

    const { exec } = require("child_process");
    const saveFile = require('fs').writeFileSync;
    let json = require("./package.json")
    json["SELECTED"] =  json[process.argv[2]]
    saveFile("./package.json", JSON.stringify(json, null, 2))
    if (process.argv[2] == "NZ") exec("npm run build && sshpass -p 'password of server here' scp -r ./build/* user@host:/path/to/site/root/")
    if (process.argv[2] == "AU") exec("npm run build && sshpass -p 'password of server here' scp -r ./build/* user@host:/path/to/site/root/")
    if (process.argv[2] == "US") exec("npm run build && sshpass -p 'password of server here' scp -r ./build/* user@host:/path/to/site/root/")
    if (process.argv[2] == "DEMO") exec("npm run build && sshpass -p 'password of server here' scp -r ./build/* user@host:/path/to/site/root/")
    
    接下来,我在
    package.json
    中添加了以下行tom my
    scripts
    对象:

    "deploy": "node ./deploy.js"
    
    要执行部署脚本并在我的AU服务器上部署,我需要:

    npm run deploy AU
    
    对于所有其他服务器也是如此,只需将标识符从AU更改为
    deploy.js
    文件中指定的其他标识符之一。有效地将我部署所需的时间减少了至少15分钟,这是一个很大的数字,因为现在我需要5分钟,而不是20%,节省了75%的时间,加上我必须在终端中编写更少的命令,我必须与我的代码交互更少,而且它是防错的(错误,如将文件SCPing到错误的文件夹或错误的服务器上)