nx run-commands target执行遇MODULE_NOT_FOUND错误求助
解决NX项目中自定义CLI脚本的模块找不到问题
你的问题出在ts-node默认不识别NX的tsconfig路径映射配置——项目构建时能正常解析这些别名,但直接用ts-node跑脚本时,它不会自动加载路径映射规则。下面是几种可行的解决方法:
方法1:用tsconfig-paths增强ts-node的路径解析
- 先安装依赖包:
npm install -D tsconfig-paths
- 修改
project.json里的commands配置,添加-r tsconfig-paths/register参数:
"my-script": { "executor": "nx:run-commands", "defaultConfiguration": "production", "options": { "cwd": "apps/my-app", "commands": ["ts-node -r tsconfig-paths/register src/my-script.ts"], "parallel": false } }
这个参数会让ts-node加载tsconfig-paths模块,自动读取tsconfig.base.json里的路径映射规则,解决模块找不到的问题。
方法2:改用NX官方的@nrwl/js:node执行器
NX提供了专门用于运行Node脚本的执行器,会自动处理项目的路径别名和依赖关系,更贴合NX的项目生态:
修改project.json的target配置:
"my-script": { "executor": "@nrwl/js:node", "options": { "main": "apps/my-app/src/my-script.ts", "tsConfig": "tsconfig.base.json" } }
如果你的脚本依赖已构建的包,还可以加上buildTarget参数确保依赖先被构建:
"my-script": { "executor": "@nrwl/js:node", "options": { "main": "apps/my-app/src/my-script.ts", "tsConfig": "tsconfig.base.json", "buildTarget": "my-app:build" } }
方法3:先构建依赖的包再执行脚本
如果你的脚本依赖NX workspace里的其他本地包,且这些包需要编译后才能被引用,可以先构建依赖包再执行脚本:
"my-script": { "executor": "nx:run-commands", "defaultConfiguration": "production", "options": { "cwd": "apps/my-app", "commands": [ "nx run-many --target=build --projects=包1,包2", "ts-node src/my-script.ts" ], "parallel": false } }
把包1,包2替换成你脚本实际依赖的本地包名称即可。
内容的提问来源于stack exchange,提问作者Pramod Biligiri
相关产品推荐
相关产品推荐

