【问题标题】:node packge.json scripts - add command to existing scriptnode package.json 脚本 - 将命令添加到现有脚本
【发布时间】:2022-01-19 17:46:38
【问题描述】:

我想在“开始”脚本中添加一个命令,所以当我执行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"
  },
.
.
.

我想过在start 脚本中添加npm install

   "start": "npm install DEBUG=my-app node src/index.js",

但这不起作用,所以我想得到一个建议,如果它甚至可能的话..

【问题讨论】:

  • 它与标准 shell 脚本的语法相同,所以 npm install && DEBUG=my-app node src/index.js 或者如果您有很多脚本要以串行/并行组合方式运行,通常更容易添加 npm-run-all 并使用它的run-srun-p 可以运行多个任务
  • 这意味着每次启动应用程序时,所有模块都会重新安装。你确定这就是你想要的吗?
  • @Andy 是的,我的应用应该使用一个命令部署一次。
  • @jrz 这个问题是,你的应用程序的启动会很慢。此外,如果 npm 发生停机,您可能无法启动您的服务。

标签: javascript node.js npm


【解决方案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"
  }

【讨论】:

    【解决方案2】:

    安迪,是的,我的应用应该用一个命令部署一次。

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

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

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

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

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

    您可能会做的是有一个名为“管道”之类的脚本,然后调用它。

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 2020-04-09
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多