Nest.js与Angular.js单仓共享lib文件夹启动失败求助
我在Nest.js和Angular两个TypeScript项目里尝试共享模型和函数,已经分别在api(Nest.js)和ui(Angular)目录建好了基础项目,根目录还弄了个lib文件夹放共享的TypeScript文件。Angular那边能正常从上级目录导入lib里的文件,但启动Nest.js时直接报错:
➜ api git:(master) npm run start > api@0.0.1 start > nest start Error: Cannot find module '/home/amir/workspace/nest-angular-monorepo/api/dist/main' at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15) at Function.Module._load (node:internal/modules/cjs/loader:804:27) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:17:47 npm ERR! Lifecycle script `start` failed with error: npm ERR! Error: command failed npm ERR! in workspace: api@0.0.1 npm ERR! at location: /home/amir/workspace/nest-angular-monorepo/api ➜ api git:(master)
这个错误本质是Nest编译后没生成dist/main.js文件,多半是共享的lib目录没被正确纳入编译流程,导致编译失败却没提前报错,最后找不到入口文件。按下面步骤排查修复:
调整Nest的tsconfig.json配置
打开api/tsconfig.json,确保compilerOptions里的include包含上级的lib目录,还可以配置paths简化导入路径:{ "compilerOptions": { // 保留原有其他配置 "include": ["src/**/*", "../lib/**/*"], "paths": { "@lib/*": ["../lib/*"] } } }更新nest-cli.json,允许编译外部目录
修改api/nest-cli.json的compilerOptions,添加assets和watchAssets,确保lib里的文件被正确处理:{ "compilerOptions": { "assets": ["../lib/**/*"], "watchAssets": true } }先手动编译,再启动项目
直接跑nest start可能会跳过编译错误提示,先执行编译命令看看具体问题:npm run build如果编译时出现
lib相关的类型或导入错误,针对性修复就行(比如检查lib目录有没有自己的tsconfig,TS版本是不是和Nest兼容)。检查导入路径是否正确
Nest项目里导入lib文件时,要么用相对路径(比如import { User } from '../lib/user.model'),要么用上面配置的@lib别名,别出现路径解析错误导致编译失败。验证package.json的入口配置
确认api/package.json里的main字段指向正确的编译后文件:{ "main": "dist/main.js" }
内容的提问来源于stack exchange,提问作者Node.JS

