# [前端包管理] 本地开发和调试 npm 包

本地开发 `npm` 包的时候通常都需要 `link` 来进行调试

对于不同的包管理软件，有不同的方式

## 一些概念

在当前目录下直接 link，就可以把当前目录下的 `npm` 包 link 到全局的 `node_modules` 中；然后在需要使用本地的 `npm` 包进行调试的目录下，执行 `npm link <package-name>`，就可以 link 到本地的包进行调试

被 link 的包会被存放到全局的 `node_modules` 下，具体的路径是 --- `{prefix}/lib/node_modules/<package>` ；`{prefix}` 可以用 `npm prefix -g` 进行查看

同时，一些 `bin` 的命令行工具也会被 link 到 `{prefix}/bin/<bin-name>` 中；这里可以通过输出 `$PATH` 来查看，可以看到我的 `node` 的全局 `bin` 就是被 `nvm` 写入到了 `$PATH` 中，所以系统是可以找得到的：

```bash
/Users/lordmoon/.nvm/versions/node/v16.20.2/bin:
```

像上面这种使用到 `nvm` 来管理的，建议 link 的时候直接 link 绝对路径，不然在切换 `node` 版本的时候，全局的 `node_modules` 和 `bin` 路径和 `$PATH` 都被更新了，容易有异常

另外，由于正常情况下，`npm link` 是不会修改 `package-lock.json` 的，所以在 link 之后执行 `npm install` 是会覆盖 link 的；所以需要先 `install` 再 `link`

## `yarn link`

在 `yarn 1` 和 `yarn 3` 版本中，link 的使用方式有些不同；`yarn 1` 是不支持像 `npm` 那样直接 link 到一个路径文件夹的，`yarn 3` 是支持的，但是貌似有些问题：

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748940784480/70dcde61-0678-46db-8d06-9d8293711cbd.png align="center")

可以看下这些 `issues` ：

[https://github.com/yarnpkg/berry/issues/90](https://github.com/yarnpkg/berry/issues/90)

[https://github.com/yarnpkg/berry/issues/4870](https://github.com/yarnpkg/berry/issues/4870)

[https://github.com/yarnpkg/berry/pull/98](https://github.com/yarnpkg/berry/pull/98)

里面还翻到了 `yarn` 的维护者对于 `yarn 3` 会修改 `package.json` 的回复（2025 年 3 月）：

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748941135251/36c39603-ed67-48ba-89cf-8baa06d69ab6.png align="center")
