连接NPM脚本命令?

17

我知道可以使用&&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时,它会将命令的所有部分合并为一行。

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


3
我认为推荐的方法是将它移入一个外部文件。一种方式是使用单行Bash文件和批处理(或PowerShell)文件,但您需要分别“维护”这两个文件。 - Whymarrh
是的,我一开始也觉得这不太可能。很遗憾,但我决定使用Node的child_pocess.exec设置一些Gulp任务。 - Chunky Chunk
4个回答

15

一个常见的做法是这样的:

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

除了这种策略外,你还可以使用npm-run-all包来获得更简洁的语法。 - Jim Perris
3
我不知道为什么这个答案有那么多赞,但它完全是错误的。问题要求的是连接而不是运行多个命令。想象一下,如果我想使用echohelloworld三个脚本来运行"echo hello world"。npm run echo && npm run hello && npm run world 显然是不正确的。 - Arijoon

3

类似于TheDarkIn1978的回答,但更简短:

最初的回答

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

注意,这需要 npm-run-all 包:https://github.com/mysticatea/npm-run-all - Joshua Pinter

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

1
这个问题唯一可行的解决方案 - Arijoon
1
这太棒了。简直不敢相信我之前不知道这个。 - martinedwards
这对于 yarn 不起作用,只适用于 npm - coler-j

2

您可以使用npm install -g concurrently命令。

简单用法:

concurrently "command1 arg" "command2 arg"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接