pnpm workspace 中如何正确引用本地包?
我在用 pnpm 的 workspace 功能,主项目想引用另一个本地 package,但总是报模块找不到。我试过在 package.json 里加 dependencies,也运行了 pnpm install,但还是不行。
比如我的结构是这样的:
import { greet } from 'my-utils';
console.log(greet('world'));
这个 my-utils 是 workspace 里的一个子包,已经配置了 name 和 exports,但运行时提示 Cannot find module ‘my-utils’,到底哪里出错了?
1. 子包的 name 字段
确认你的 my-utils 包的 package.json 里有 name 字段,而且名字要完全一致:
2. 根目录的 pnpm-workspace.yaml
确保根目录有 workspace 配置:
或者你的目录结构可能不是 packages/ 开头,那改成你实际的路径。
3. 主项目的 dependencies
在主项目的 package.json 里明确声明依赖:
重点是
workspace:*这个协议,pnpm 需要这个来识别是本地 workspace 包。4. 执行安装
配置改完之后,一定要删掉 node_modules 和 pnpm-lock.yaml,重新跑一遍:
pnpm workspace 对符号链接的处理比较敏感,有时候缓存会导致问题。
5. 常见坑:子包没有正确导出
如果 my-utils 是用 TypeScript 写的,确认它的 package.json 里的 main 或 exports 指向的是编译后的 JS 文件,而不是 .ts 源文件。pnpm 不会自动编译 TypeScript。
你检查一下这几个配置点,基本就能定位问题在哪里了。