npm link 是一个专门为本地开发 npm 包(比如你做的组件库)设计的工具。
一句话解释就是:
它在不同项目之间创建“符号链接(symlink)”,让你在不发布到 npm 的情况下,本地实时使用这个包。
一、为什么要用 npm link
当你在开发一个组件库时(例如 ui-library),通常想在另一个项目(例如 web-app)里实时测试它的功能。
但是:
- 你又不想每次都
npm publish到 npm; - 也不想每次改动都重新打包、重新安装。
npm link 就是为了解决这个问题的。
它可以:
- 把组件库“注册”到全局环境;
- 然后在业务项目里“链接”到它;
- 最终效果:业务项目的
node_modules/ui-library实际上是一个指向你本地源码的软链接。
二、怎么工作的(图解式思维)
以你的目录为例:
demo/
ui-library/
web-app/
执行流程如下:
在组件库里运行:
cd ui-library npm link- npm 会在全局 node_modules(例如
/usr/local/lib/node_modules/)里注册一个符号链接指向你的ui-library。
- npm 会在全局 node_modules(例如
在业务项目里运行:
cd ../web-app npm link ui-library- 这会在
web-app/node_modules/下再创建一个符号链接,指向全局的那个ui-library链接。
- 这会在
最终形成两级链接:
web-app/node_modules/ui-library -> /usr/local/lib/node_modules/ui-library -> /Users/weiwei/workspace/project/ui-library
三、效果
现在你可以在
web-app中直接写:import { Button } from 'ui-library';- 任何在
ui-library/src里的改动都会立刻反映到 web-app 里(不需要重新安装依赖)。 - 适合本地组件库开发和联调。
四、常见命令
| 操作 | 命令 |
|---|---|
| 创建全局 link | npm link(在组件库目录执行) |
| 链接到业务项目 | npm link <包名>(在 web-app 里执行) |
| 查看全局链接 | npm ls -g --link=true |
| 取消项目链接 | npm unlink <包名> |
| 删除全局链接 | npm unlink -g <包名> |
五、优缺点总结
优点:
- 改动组件库代码可实时反映,不需安装或打包。
- 非常适合本地开发和调试组件库。
- 模拟 npm 包发布后的使用方式。
缺点:
- 依赖全局环境(不同机器路径不一样)。
- 可能需要 sudo 权限。
- 团队其他人拿不到 link 环境(每个人要自己执行 link)。
- 不适合 CI/CD 或生产。
六、替代方案
file:本地引用(最简单,适合稳定调试)pnpm workspace/yarn workspaces(更专业,团队项目推荐)
一句话总结:
npm link就像给你的组件库打了一根“电缆”,把它直接接到另一个项目的 node_modules 里,让你能实时调试而不用重新安装。
