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

合并npm脚本时tsnd参数丢失、环境变量失效如何解决?

问题描述

合并两个npm脚本时出现异常:tsnd的参数无法正常传递,dotenv包不可用,用&符号合并命令会导致cross-env失效,环境变量无法正确定义。

当前package.json中的脚本配置:

"define:local": "cross-env NODE_ENV=local FOO=bar BAZ=foo",
"local:dev": "npm run define:local tsnd --inspect --respawn path/to/mycode.ts"

运行npm run local:dev后,终端输出如下:

cross-env NODE_ENV=local FOO=bar BAZ=foo "tsnd" "path/to/mycode.ts"

可见tsnd的--inspect --respawn参数被丢弃,且tsnd命令和文件路径被自动添加引号,引发本地开发故障。

但直接执行tsnd --inspect --respawn path/to/mycode.ts时,参数正常保留且无额外引号,运行符合预期。

解决方案

方法1:用--传递参数给目标命令

npm脚本中,给npm run调用的后续命令传参必须用--分隔,否则参数会被识别为npm run自身的参数。修改local:dev脚本:

"local:dev": "npm run define:local -- tsnd --inspect --respawn path/to/mycode.ts"

这里的--会让npm把后面的所有内容作为参数传递给define:local执行的命令,确保tsnd的参数被完整保留。

方法2:直接合并环境变量与tsnd命令

如果不需要单独保留define:local脚本,可直接将环境变量定义和tsnd命令写在同一个脚本里,避免参数传递问题:

"local:dev": "cross-env NODE_ENV=local FOO=bar BAZ=foo tsnd --inspect --respawn path/to/mycode.ts"

这种写法更直接,环境变量会直接作用于后续的tsnd命令,无需依赖npm的参数传递逻辑。

方法3:使用npm-run-all串行执行(可选)

若需要保留独立的环境变量定义脚本,可安装npm-run-all(npm install npm-run-all --save-dev),用其提供的run-s命令串行执行,同样需用--传递参数:

"define:local": "cross-env NODE_ENV=local FOO=bar BAZ=foo",
"local:dev": "run-s define:local -- tsnd --inspect --respawn path/to/mycode.ts"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:16:20