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

如何在NestJS命令中正确使用--exec选项?

问题

想要在NestJS服务启动前通过--exec选项执行指定脚本(基于--require),需要修改package.json中的start:dev脚本。单独执行npx ts-node --require ./src/common/telemetry/telemetry.ts ./src/main.ts可以正常运行,但尝试以下两种配置写法时均失败,出现ARG_UNKNOWN_OPTION错误,错误提示未知选项--enable-source-maps:

尝试的两种配置:

"start:dev": "nest start --watch --exec  \"ts-node --require ./src/common/telemetry/telemetry.ts\"",

"start:dev": "nest start --watch --exec  ts-node --require ./src/common/telemetry/telemetry.ts",

错误详情:

Error: Unknown or unexpected option: --enable-source-maps
    at arg (C:\Users\jerom\dev\stelogy\apiLeoniJira\node_modules\arg\index.js:88:19)
    at parseArgv (C:\Users\jerom\dev\stelogy\apiLeoniJira\node_modules\ts-node\dist\bin.js:69:12)
    at main (C:\Users\jerom\dev\stelogy\apiLeoniJira\node_modules\ts-node\dist\bin.js:25:18)
    at Object.<anonymous> (C:\Users\jerom\dev\stelogy\apiLeoniJira\node_modules\ts-node\dist\bin.js:579:5)
    at Module._compile (node:internal/modules/cjs/loader:1546:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1691:10)
    at Module.load (node:internal/modules/cjs/loader:1317:32)
    at Module._load (node:internal/modules/cjs/loader:1127:12)
    at TracingChannel.traceSync (node:diagnostics_channel:315:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:217:24) {
  code: 'ARG_UNKNOWN_OPTION'
}

解决方案

问题根源是Nest CLI会自动给--exec后的命令追加--enable-source-maps参数,但这个参数要么对当前使用的ts-node版本无效,要么参数传递逻辑混乱导致ts-node识别错误。提供两种可行的解决方式:

方式一:用shell包裹命令避免参数混乱

修改package.json中的start:dev脚本:

  • Linux/macOS环境:
"start:dev": "nest start --watch --exec \"bash -c 'ts-node --require ./src/common/telemetry/telemetry.ts $0'\""
  • Windows环境:
"start:dev": "nest start --watch --exec \"cmd /c \"ts-node --require ./src/common/telemetry/telemetry.ts %%0\"\""

这种方式通过shell命令包裹,Nest CLI追加的入口文件路径会被正确解析为$0(或Windows下的%%0),ts-node不会收到不属于它的--enable-source-maps参数。

方式二:通过tsconfig配置预加载脚本

直接在tsconfig.json中添加ts-node配置,不需要修改启动命令:

// tsconfig.json
{
  "compilerOptions": {
    // 原有编译配置...
  },
  "ts-node": {
    "require": ["./src/common/telemetry/telemetry.ts"]
  }
}

然后start:dev脚本保持默认即可:

"start:dev": "nest start --watch"

这种方式更简洁,ts-node会在启动时自动加载指定的脚本,完全规避命令行参数传递的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:31:00