【问题标题】:How do I add custom scripts in my package.json如何在我的 package.json 中添加自定义脚本
【发布时间】:2021-08-15 19:43:19
【问题描述】:

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

  1. 在我的代码中更改一些常量
  2. 执行npm run build
  3. scp 我的文件到我想要的服务器:/位置

我想要做的基本上是运行类似npm run deploy --region=AU 的命令并自动执行所有 3 个步骤。

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

【问题讨论】:

    标签: npm deployment package.json npm-scripts


    【解决方案1】:

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

    5 个实例中的 4 个用于每个区域之一,其中 1 个是选定的实例,所以我有 AU、US、NZ、DEMO 和 SELECTED。

    接下来我创建了一个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 中添加了以下行 to 我的scripts 对象:

    "deploy": "node ./deploy.js"
    

    要执行部署脚本并在我的 AU 服务器上进行部署,我需要:

    npm run deploy AU
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-27
      • 2016-07-25
      • 2016-01-14
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多