Lerna共享包Typescript导入需后缀/src的问题该如何修复?
这个问题和lerna配置无关,是你的myShared包的package.json缺少正确的入口配置,按照以下步骤修复即可:
修复步骤
1. 配置shared包的package.json入口字段
找到packages/shared/package.json文件,添加/修改入口相关字段:
main:对应CommonJS规范的入口文件路径module:对应ES Module规范的入口文件路径types:对应TypeScript类型声明的入口路径
如果你的项目是提前把TS编译到dist目录再发布使用,配置示例如下:
{ "name": "myShared", "version": "1.0.0", "main": "dist/index.js", "module": "dist/index.esm.js", "types": "dist/index.d.ts", // 其余原有配置保持不变 }
如果你的monorepo内是直接引用TS源码不做提前编译,直接指向源码入口即可:
{ "name": "myShared", "version": "1.0.0", "main": "src/index.ts", "types": "src/index.ts" }
2. (可选)配置exports字段限制导出范围
如果你使用的是TS 4.7及以上版本,可以额外添加exports字段明确导出规则,避免其他包意外引用shared包的内部路径:
{ "exports": { ".": { "types": "./src/index.ts", "import": "./src/index.ts", "require": "./src/index.ts" } } }
3. 检查shared包的tsconfig配置
确保packages/shared/tsconfig.json中开启了declaration配置项,这样编译时会自动生成类型声明文件,其他包导入时才能正确识别类型:
{ "compilerOptions": { "declaration": true, "outDir": "./dist", // 其余原有配置保持不变 } }
4. 刷新依赖验证配置
修改完成后重新执行lerna bootstrap或者对应包管理器的workspace依赖安装命令(比如pnpm install)刷新软链接,之后就可以直接通过import {GreatClass} from "myShared";完成导入。
常见问题排查
- 入口路径要精确到具体的index文件,不要只写到
src/层级 - 如果你的monorepo使用了workspace协议,确保usesShared包的依赖中
myShared的版本写法正确,比如pnpm下是"myShared": "workspace:*"
内容的提问来源于stack exchange,提问作者chrismead
相关产品推荐
相关产品推荐

