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

如何在npm脚本间传递参数?适配环境判断场景的实现

解决方案

问题根源

你的脚本参数传递失败,核心原因有两个:

  1. 嵌套调用npm脚本时,未用--分隔npm命令参数与要传递给目标脚本的额外参数;
  2. 原脚本中$@未用双引号包裹,导致带空格的参数解析异常,且无法确保参数被正确传递到ts-node/node命令中。

修改后的脚本配置

"no-local-build": "cd ./server && if [ \"$NODE_ENV\" = \"development\" ]; then npx ts-node src/tasks/$npm_config_task.ts \"$@\"; else node build/tasks/$npm_config_task.js \"$@\"; fi;",
"runner": "npm run no-local-build --task=$npm_config_task -- $@"

关键修改说明

  1. runner脚本调整:
    添加-- $@,作用是将调用runner时传递的所有额外参数(如arg1、arg2)完整传递给no-local-build脚本。npm会将--后的内容视为被调用脚本的参数,而非npm自身的配置项。

  2. no-local-build脚本调整:
    将$@改为"$@",确保每个参数(包括带空格的参数)都被作为独立单元解析,避免参数拆分错误,同时保证参数被正确传递到ts-node或node的执行命令中。

调用示例

  • 开发环境执行带参数的任务:
    NODE_ENV=development npm run runner --task=myCustomTask -- arg1 "argument with space" arg3
    
  • 生产环境执行带参数的任务:
    NODE_ENV=production npm run runner --task=myCustomTask -- arg1 arg2
    

注意事项

  • 调用时必须在额外参数前加--,否则npm会将这些参数识别为npm run命令自身的参数,无法传递到目标脚本;
  • 确保$npm_config_task能正确获取到--task指定的任务名,npm会自动将--task=<task>转换为环境变量npm_config_task。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:13:30