如何在 package.json 中添加自定义脚本
How do I add custom scripts in my package.json
我想添加一个名为 deploy
的自定义命令,它接受一个参数 (AU/EU/US/NZ)。我的应用程序有 4 个实例,1 个在澳大利亚,1 个在新西兰,1 个在美国,1 个在欧盟 - 德国。当我想部署我的应用程序时,我必须做这三件事:
- 更改我的代码中的一些常量
- 执行
npm run build
- scp 我的文件到我想要的服务器:/location
我想做的基本上是 运行 类似 npm run deploy --region=AU
的命令并自动执行所有 3 个步骤。
每次我必须部署更新时,这实际上会为我节省很多时间(10-15 分钟)。
我通过向 package.json
添加 5 个新属性解决了这个问题。这些属性中的每一个都包含有关不同 api/static 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
中的 scripts
对象中添加了以下行:
"deploy": "node ./deploy.js"
要执行部署脚本并在我的 AU 服务器上部署,我需要:
npm run deploy AU
所有其他服务器也一样,只需要将标识符从 AU 更改为 deploy.js
文件中指定的其他标识符之一。有效地将我部署所需的时间减少了至少 15 分钟,这已经很多了,因为现在我只需要 5 分钟而不是 20 分钟——从百分比来看,它节省了 75% 的时间,而且我必须在终端中编写更少的命令,我必须减少与我的代码的交互,并且它是防错的(错误如 SCPing 文件到不正确的文件夹或在错误的服务器上)。
我想添加一个名为 deploy
的自定义命令,它接受一个参数 (AU/EU/US/NZ)。我的应用程序有 4 个实例,1 个在澳大利亚,1 个在新西兰,1 个在美国,1 个在欧盟 - 德国。当我想部署我的应用程序时,我必须做这三件事:
- 更改我的代码中的一些常量
- 执行
npm run build
- scp 我的文件到我想要的服务器:/location
我想做的基本上是 运行 类似 npm run deploy --region=AU
的命令并自动执行所有 3 个步骤。
每次我必须部署更新时,这实际上会为我节省很多时间(10-15 分钟)。
我通过向 package.json
添加 5 个新属性解决了这个问题。这些属性中的每一个都包含有关不同 api/static 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
中的 scripts
对象中添加了以下行:
"deploy": "node ./deploy.js"
要执行部署脚本并在我的 AU 服务器上部署,我需要:
npm run deploy AU
所有其他服务器也一样,只需要将标识符从 AU 更改为 deploy.js
文件中指定的其他标识符之一。有效地将我部署所需的时间减少了至少 15 分钟,这已经很多了,因为现在我只需要 5 分钟而不是 20 分钟——从百分比来看,它节省了 75% 的时间,而且我必须在终端中编写更少的命令,我必须减少与我的代码的交互,并且它是防错的(错误如 SCPing 文件到不正确的文件夹或在错误的服务器上)。