Nx Monorepo生产构建后内部库导入失败问题求助
Nx Monorepo Node.js应用生产构建无法找到内部未发布库的官方解决方案
方案1:构建时将内部库捆绑到应用产物中
修改apps/pulse/project.json的build目标配置,让Webpack将内部库代码打包进应用产物:
"targets": { "build": { "executor": "@nx/node:webpack", "options": { "outputPath": "dist/apps/pulse", "main": "apps/pulse/src/main.ts", "tsConfig": "apps/pulse/tsconfig.app.json", "assets": ["apps/pulse/src/assets"], // 排除内部库,告知Webpack不将其视为外部依赖 "external": ["!@readyfastcode/mongo-connect"] }, "configurations": { "production": { "optimization": true, "extractLicenses": true, "inspect": false } } } }
- 确保内部库
@readyfastcode/mongo-connect的project.json已配置正确的build目标,产物输出到dist/libs/mongo-connect(NX默认结构) - 重新执行
nx build pulse即可,运行node dist/apps/pulse/main.js时无需额外处理
方案2:运行时通过NX路径映射解析(适合不捆绑的场景)
若需保留内部库的独立构建,可通过复制产物到应用dist目录实现运行时解析:
- 确认根目录
tsconfig.base.json已配置内部库的路径映射(NX创建库时自动生成):
"compilerOptions": { "paths": { "@readyfastcode/mongo-connect": ["libs/mongo-connect/src/index.ts"] } }
- 修改
apps/pulse/project.json的build目标,配置资产复制与package.json生成:
"targets": { "build": { "executor": "@nx/node:webpack", "options": { "outputPath": "dist/apps/pulse", "main": "apps/pulse/src/main.ts", "tsConfig": "apps/pulse/tsconfig.app.json", "assets": [ "apps/pulse/src/assets", // 将内部库构建产物复制到应用dist的node_modules下 { "input": "dist/libs/mongo-connect", "output": "./node_modules/@readyfastcode/mongo-connect" } ], // 启用自动生成package.json,确保依赖声明正确 "generatePackageJson": true } } }
- 执行顺序:先构建内部库
nx build mongo-connect,再构建应用nx build pulse - 运行
node dist/apps/pulse/main.js时,Node会从本地node_modules找到内部库
注意事项
- 保持代码中导入路径为
@readyfastcode/mongo-connect,不要改为相对路径 - 方案2中,内部库更新后需重新构建库和应用
- 确保内部库的
build目标输出路径符合NX默认的dist/libs/<library-name>结构
内容的提问来源于stack exchange,提问作者Omar
相关产品推荐
相关产品推荐

