You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node中通过run-s向预脚本任务传递脚本参数?Angular多模块项目场景问询

解决Angular多模块项目中Build前执行带参数的复制脚本问题

我来给你梳理下可行的解决办法,先说说你之前遇到的问题:

  • npm的prebuild预脚本虽然会自动在build前执行,但它是独立运行的,不会继承build命令传递的参数,所以你的复制脚本拿不到proj1这个参数。
  • 你用run-s的写法不对,{1}这种占位符不是npm脚本的标准用法,而且参数传递的逻辑没处理对。

下面是两种靠谱的解决方案,你可以按需选择:

方案一:直接串联脚本(无需额外依赖)

调整package.json的scripts配置,把复制脚本和ng build直接串联,用"$@"来传递所有参数:

{
  "scripts": {
    "build": "node ./copyscript.js \"$@\" && ng build -- \"$@\""
  }
}

说明:

  • "$@"会把你执行npm run build时传递的所有参数(比如proj1)原封不动传递给后面的命令。
  • 如果你的复制脚本需要参数,但ng build不需要,那可以去掉ng build后面的-- "$@",改成:
    "build": "node ./copyscript.js \"$@\" && ng build"
    
  • 在你的copyscript.js里,可以通过process.argv获取参数,注意前两个元素是node路径和脚本本身路径,实际参数从索引2开始:
    // copyscript.js
    const projectName = process.argv[2]; // 这里就能拿到"proj1"
    console.log(`正在复制项目${projectName}的文件...`);
    // 你的复制逻辑
    

方案二:用npm-run-all(run-s)传递参数

如果你习惯用run-s来管理串行脚本,正确的配置应该是这样:

首先确保你已经安装了npm-run-all:

npm install npm-run-all --save-dev

然后修改package.json:

{
  "scripts": {
    "copy": "node ./copyscript.js",
    "build": "run-s \"copy -- $@\" \"ng build -- $@\""
  }
}

说明:

  • 这里用$@传递参数,并且用引号把每个命令包裹,确保参数能正确传递给对应脚本。
  • 执行命令的方式还是一样:npm run build proj1

执行命令的注意点

如果你的参数里包含空格或者特殊字符,记得在参数前加上--,比如:

npm run build -- proj1 "with spaces"

这样就能保证参数被正确传递给复制脚本和ng build啦。

内容的提问来源于stack exchange,提问作者Apollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 12:42:32