node packge.json 脚本 - 将命令添加到现有脚本

问题描述 投票:0回答:3

我想向“启动”脚本添加一个命令,这样当我执行

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",

但这行不通,所以我想得到一个建议,无论是否可能..

javascript node.js npm
3个回答
1
投票

我认为你只使用 && 连接器。喜欢:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "npm install && DEBUG=my-app node src/index.js",
    "dev": "nodemon src/index.js"
  }

0
投票

Andy 是的,我的应用程序应该使用单个命令部署一次。

这是一个相当繁重/缓慢的启动,在启动应用程序之前安装所有模块。

这意味着如果我在节点服务器中的某个位置更改代码,停止该进程并再次运行它,就会发生完整安装。我知道你有一个带有 nodemon 的开发脚本,但仍然如此。

另一种情况:如果您的应用程序在实时服务器上崩溃并且您需要重新启动它,那么将会发生完整安装。如果模块升级了补丁或次要版本,会发生什么情况。这意味着您将启动一个具有不同依赖项的项目。

如果您在 ci/cd 中执行此操作,则管道通常会被分割:

  1. 安装 - npm ci
  2. 构建/编译 - 例如,如果您有打字稿(不是您的情况)
  3. 运行所有测试
  4. 使用 npm prune 删除 devDependency
  5. 启动进程

你可能会做的是有一个名为“管道”或其他东西的脚本,然后调用它。

"pipeline": npm ci && npm run build && npm test && npm prune && npm start

然后将在您的管道代码中调用该脚本。


0
投票

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

有关 生命周期脚本的更多信息请参见此处

© www.soinside.com 2019 - 2024. All rights reserved.