如何在NX monorepo中移除包导入路径里的src目录?
移除NX多包项目导入路径中的src目录
要实现直接通过import { ... } from 'my-proj1'导入模块,无需在路径中添加src,按以下步骤操作:
1. 配置my-proj1的package.json
修改packages/my-proj1/package.json,添加或调整字段明确包的入口与导出规则:
{ "name": "my-proj1", "main": "./dist/index.js", // 编译后的JS入口 "types": "./dist/index.d.ts", // 类型定义文件入口 "exports": { ".": { "import": "./dist/index.js", "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "./*": { "import": "./dist/*.js", "require": "./dist/*.js", "types": "./dist/*.d.ts" } } // 保留原有其他配置 }
若需支持开发时直接引用src文件(无需预编译),可在exports中追加开发环境映射:
"exports": { ".": { "development": "./src/index.ts", "import": "./dist/index.js", "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "./*": { "development": "./src/*.ts", "import": "./dist/*.js", "require": "./dist/*.js", "types": "./dist/*.d.ts" } }
2. 在my-proj1的src目录创建入口文件
在packages/my-proj1/src/index.ts中统一导出需对外暴露的模块:
// 示例:导出src下的核心模块 export * from './modules/foo'; export * from './utils/bar';
若需支持单个文件的直接导入(如import { Baz } from 'my-proj1/utils/baz'),可在对应子目录创建index.ts导出目标模块,或依赖package.json的通配符映射。
3. 配置my-proj1的tsconfig.json
确保编译配置正确,将产物生成到dist目录:
{ "compilerOptions": { "outDir": "./dist", "declaration": true, // 生成类型定义文件 "declarationMap": true // 保留原有其他配置 }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }
4. 重新编译并验证
执行NX编译命令构建my-proj1:
nx build my-proj1
之后在my-proj2的代码中即可使用简化路径导入:
// 替代原有的 'my-proj1/src' import { Foo, Bar } from 'my-proj1'; // 若配置子路径映射,可直接导入子模块 import { Baz } from 'my-proj1/utils/baz';
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

