我有一个项目,在其中构建了几个模块。在发现nestjs有一个lib cli命令后,我将它们全部移植为使用这种样式。
现在,我的应用在使用npm run start:prod
时找不到这些模块。
Error: Cannot find module '@app/foo'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:582:15)
at Function.Module._load (internal/modules/cjs/loader.js:508:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (/Users/xxx/Development/nest-test/dist/src/app.service.js:13:15)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
我创建了一个包含基本代码和一个库的项目来重现该问题:https://github.com/hkeio/nestjs-test
即使我链接包节点也找不到模块。
cd libs/foo
npm link
cd ../..
npm link @app/foo
运行NODE_DEBUG=* npm run start:prod
时,我可以看到他在寻找正确的位置,但是找不到模块:
MODULE 12494: looking for "@app/foo" in [
"/Users/xxx/Development/nest-test/dist/src/node_modules",
"/Users/xxx/Development/nest-test/dist/node_modules",
"/Users/xxx/Development/nest-test/node_modules",
"/Users/xxx/Development/node_modules",
"/Users/xxx/node_modules",
"/Users/node_modules",
"/node_modules",
"/Users/xxx/.node_modules",
"/Users/xxx/.node_libraries",
"/Users/xxx/.nvm/versions/node/v10.15.3/lib/node"
]
...
$ pwd
/Users/xxx/Development/nest-test/node_modules
$ ll @app
total 0
drwxr-xr-x 3 xxx staff 96 May 30 09:04 .
drwxr-xr-x 608 xxx staff 19456 May 30 09:04 ..
lrwxr-xr-x 1 xxx staff 65 May 30 09:04 foo -> ../../../../.nvm/versions/node/v10.15.3/lib/node_modules/@app/foo```
答案 0 :(得分:0)
根据tsconfig-paths的docs,可以在使用node执行构建的源代码时使用它。 您引用的问题注释也提到了使用node执行。
实际上,问题是在使用节点dist / main.js执行构建的文件时发生的,而不是在使用tsc的构建过程中发生的。
我通过遵循tsconfig-paths文档中的theses instructions设法获得了可行的解决方案。 @bisonfoutu创建了示例存储库here。
tsconfig-paths-bootstrap.js
的文件添加到项目的根目录,然后将文档中的代码粘贴到其中。start:prod
脚本更改为:node -r ./tsconfig-paths-bootstrap.js dist/main.js
tsconfig.json
中未设置任何路径,则将无法编译)