我想向“启动”脚本添加一个命令,这样当我执行
npm start
时,首先运行的是 npm install
。
我的 package.json 如下所示:
.
.
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "DEBUG=my-app node src/index.js",
"dev": "nodemon src/index.js"
},
.
.
.
我考虑过在
npm install
脚本中添加 start
:
"start": "npm install DEBUG=my-app node src/index.js",
但这行不通,所以我想得到一个建议,无论是否可能..
我认为你只使用 && 连接器。喜欢:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "npm install && DEBUG=my-app node src/index.js",
"dev": "nodemon src/index.js"
}
Andy 是的,我的应用程序应该使用单个命令部署一次。
这是一个相当繁重/缓慢的启动,在启动应用程序之前安装所有模块。
这意味着如果我在节点服务器中的某个位置更改代码,停止该进程并再次运行它,就会发生完整安装。我知道你有一个带有 nodemon 的开发脚本,但仍然如此。
另一种情况:如果您的应用程序在实时服务器上崩溃并且您需要重新启动它,那么将会发生完整安装。如果模块升级了补丁或次要版本,会发生什么情况。这意味着您将启动一个具有不同依赖项的项目。
如果您在 ci/cd 中执行此操作,则管道通常会被分割:
你可能会做的是有一个名为“管道”或其他东西的脚本,然后调用它。
"pipeline": npm ci && npm run build && npm test && npm prune && npm start
然后将在您的管道代码中调用该脚本。
package.json
文件中的任何脚本都可以随时使用 pre
和 post
“生命周期”脚本。例如 - 如果您想在执行 start
脚本之前执行额外的命令 - 创建一个具有相同前缀名称的新命令,例如 prestart
。之后,当您运行 npm run start
时,它将首先运行 prestart
,然后运行 start
,之后,如果有任何情况,它将运行 poststart
。
要测试它,请运行以下命令 - 有关它们的更多信息,请参见此处
npm pkg set scripts.prestart='echo "pre start"'
npm pkg set scripts.start='echo "start"'
npm pkg set scripts.poststart='echo "post start"'
然后运行
npm run start
你的输出将类似于
pre start
...
start
...
post start