在NX monorepo中运行nestjs-commander构建的CLI自定义命令报错
解决nest-commander + ts-node运行报错的问题
1. 搞定"Cannot use import statement outside a module"错误
只改子项目tsconfig里的ts-node配置不够,得让ts-node正确读取根目录的tsconfig.base.json,同时统一模块规则:
- 要么在
apps/api/package.json里加"type": "commonjs"(根package.json没设的话); - 要么运行ts-node时显式指定用根配置文件,确保继承base里的所有设置:
ts-node --project tsconfig.base.json apps/api/src/main.ts basic - 检查根
tsconfig.base.json的module字段,确保和ts-node配置一致(比如都设为commonjs)。
2. 修复"Cannot find module '@myapp/db'"错误
这是因为ts-node默认不解析tsconfig里的paths别名,得额外处理:
- 先装
tsconfig-paths依赖:npm install -D tsconfig-paths - 运行命令时加上路径别名注册器:
ts-node -r tsconfig-paths/register --project tsconfig.base.json apps/api/src/main.ts basic - 或者在
apps/api/tsconfig.json里配置ts-node自动加载注册器,同时确保继承根配置:{ "extends": "../../tsconfig.base.json", // 其他原有配置 "ts-node": { "compilerOptions": { "module": "commonjs" }, "require": ["tsconfig-paths/register"] } }
这样ts-node就能识别@myapp/db这类别名路径了。
额外提示
- 尽量别直接在子项目tsconfig里覆盖base的配置,优先用继承和命令行参数统一管理;
- 如果是Nx这类monorepo,确保所有子项目的tsconfig都正确extends根配置,ts-node才能识别跨包的路径映射。
内容的提问来源于stack exchange,提问作者akkonrad
相关产品推荐
相关产品推荐

