【问题标题】:Concatenate NPM Script Commands?连接 NPM 脚本命令?
【发布时间】:2026-02-15 22:15:02
【问题描述】:

我知道可以使用 &&pre-post- 挂钩链接 NPM 脚本,但是否可以简单地将冗长的脚本行分成单个串联的行?

例如,我想转换这个:

"script": {
  "build": "--many --commands --are --required --on --a --single --line"
}

进入这个:

"script": {
  "part1": "--many --commands",
  "part2": "--are --required",
  "part3": "--on --a",
  "part4": "--single --line",
  "build": "part1 + part2 + part3 + part4"
}

所以当我输入npm run build 时,它会将命令的所有部分合并到一行中。

我也熟悉配置变量,但它们不是跨平台解决方案,因此我将避免使用它们。

【问题讨论】:

  • 我认为推荐的方法是将其移动到外部文件中。单行 Bash 文件和 Batch(或 PowerShell)文件是一种方法,但您需要分别“维护”这两个文件。
  • 是的,我认为这不太可能。太糟糕了,但我决定用 Node 的 child_pocess.exec 设置一些 Gulp 任务

标签: javascript node.js npm


【解决方案1】:

常见的做法是:

{
  "scripts:": {
    "script1": "cmd1",
    "script2": "cmd2",
    "script3": "cmd3",
    "build": "npm run script1 && npm run script2 && npm run script3",
  }
}

【讨论】:

  • 除了这个策略,还可以使用 npm-run-all 包来获得更简洁的语法。
  • 我不知道为什么这个答案有这么多赞成票,但它完全错误。问题是要求 concatenating 不运行多个命令。想象一下,我想使用 3 个带有 echohelloworld 的脚本运行“echo hello world”。 npm run echo && npm run hello && npm run world 明显不正确
【解决方案2】:

与 TheDarkIn1978 的回答类似,但更短:

"script": {
  "build:js": "--many --commands",
  "build:css": "--are --required",
  "build:images": "--on --a",
  "build": "run-s build:*"
}

【讨论】:

【解决方案3】:

你可以像这样在你的 package.json 中使用 config 参数, 虽然它更长!

您至少可以使用此方法重用您的配置。

可能有一种方法可以基于正则表达式连接多个环境变量。

{

  "config": {
    "part1": "--many --commands",
    "part2": "--are --required",
    "part3": "--on --a",
    "part4": "--single --line",
  },
  "script": {
    "build": "cmd $npm_package_config_part1 $npm_package_config_part2 $npm_package_config_part3 $npm_package_config_part4"
  }
}

【讨论】:

  • 这个问题唯一可行的解​​决方案
  • 这太棒了。不敢相信我不知道这一点。
【解决方案4】:

你可以使用 npm install -g concurrently

简单用法:

concurrently "command1 arg" "command2 arg"

【讨论】: