Nest.js+NX monorepo中i18n文件夹未打包至dist目录问题求助
NX Monorepo下Nest.js集成i18n时i18n文件夹未输出到dist目录的排查修复
问题概述
在NX Monorepo架构中使用Nest.js集成i18n,编译后i18n文件夹未被输出到dist/apps/api目录,导致应用无法读取国际化资源。以下结合提供的配置文件给出针对性排查方案:
配置文件问题排查与修复
1. 修正nest-cli.json的资源路径配置
当前项目目录下的nest-cli.json中,assets.include路径指向错误:
"assets": [ { "include": "i18n/**/*", "watchAssets": true, "outDir": "dist/apps/api" } ]
根据项目结构,i18n文件夹位于apps/api/src下,因此需要调整include为相对nest-cli.json的正确路径:
"assets": [ { "include": "src/i18n/**/*", "watchAssets": true, "outDir": "dist/apps/api" } ]
2. 补充NX项目project.json的资源配置
NX优先读取项目目录(apps/api)下project.json的构建配置,需在build目标中添加i18n资源的复制规则:
{ "targets": { "build": { "executor": "@nrwl/nest:build", "options": { "outputPath": "dist/apps/api", "assets": [ { "input": "apps/api/src/i18n", "glob": "**/*", "output": "./i18n" } ] } } } }
3. 确保tsconfig.app.json包含i18n资源
检查apps/api/tsconfig.app.json的include配置,确认未排除i18n文件夹:
{ "include": ["src/**/*"], "exclude": ["node_modules", "dist", "src/**/*.spec.ts", "src/**/*.test.ts"] }
4. 调整I18nModule的资源路径
编译后__dirname指向dist/apps/api/src/app,原路径path.join(__dirname,'/../i18n/')会指向dist/apps/api/src/i18n,但我们的资源会输出到dist/apps/api/i18n,因此需要修正路径:
I18nModule.forRoot({ fallbackLanguage: 'tr', loaderOptions: { path: path.join(__dirname, '../../i18n/'), watch: true, }, resolvers: [ { use: QueryResolver, options: ['lang'] }, AcceptLanguageResolver, ], }),
5. 清除NX缓存并重新构建
NX的缓存机制可能导致旧配置生效,执行以下命令重置缓存后重新构建:
nx reset nx build api
内容的提问来源于stack exchange,提问作者Ramazan Sağır
相关产品推荐
相关产品推荐

