NPM 链接和取消链接

2025-06-08

NPM 链接和取消链接

在工作中,我们管理和维护自己的 npm 包。作为开发流程的一部分,在更大的项目中测试包至关重要,以确保其能够按预期运行并满足我们的所有标准。我一直在使用的一个便捷技巧是使用 链接本地 npm 包npm link

然而,由于每天都有多个任务同时进行,我经常遇到权限问题,导致包无法使用。说实话,这真的很烦人。这是因为我经常切换分支,而且切换之前没有清理本地环境。

以下是链接和取消链接的具体步骤,以便您可以避免我所经历的#struggle。

假设我们有一个npm正在本地处理的包,我们称之为cowabunga。我们的项目结构如下所示:

cowabunga 包文件夹结构

它的package.json文件看起来像这样:

{
"name": "cowabunga",
"version": "0.0.1",
"description": "This component alerts you when things are awesome",
"main": "dist/index.js",
"keywords": [
"component",
"cowabunga",
"dude"
],
"dependencies": {
"some-package": "^10.0.1"
},
"author": "",
"license": "ISC",
"access": "public"
}
view raw package.json hosted with ❤ by GitHub
{
"name": "cowabunga",
"version": "0.0.1",
"description": "This component alerts you when things are awesome",
"main": "dist/index.js",
"keywords": [
"component",
"cowabunga",
"dude"
],
"dependencies": {
"some-package": "^10.0.1"
},
"author": "",
"license": "ISC",
"access": "public"
}
view raw package.json hosted with ❤ by GitHub

你会注意到这个包有它自己的node_modules文件夹——这就是我一直犯的错误。我切换了我的包所在的仓库的分支,node_modules由于构建了其他不在两个分支上的组件,这个文件夹就会消失。当我取消链接时,npm 会抛出权限错误,如下所示:



npm ERR! enoent ENOENT: no such file or directory, access ‘my_project/node_modules/cowabunga/node_modules/some-package’


Enter fullscreen mode Exit fullscreen mode

为了避免这种情况,你必须遵循链接/取消链接的顺序,否则 npm 会尝试取消链接不再存在的文件夹。这看起来很简单,但搞清楚却出奇地繁琐。

链接:

首先,在cowabunga文件夹(package.json 所在的位置)中:



npm link


Enter fullscreen mode Exit fullscreen mode

然后在您想要包含cowabunga 的项目中:



npm link cowabunga


Enter fullscreen mode Exit fullscreen mode

解除链接:

在切换分支和/或从包本身删除任何节点模块之前learn clean(在我的项目中,这包括运行删除node_modules文件夹的操作)

首先,在项目中:



npm unlink --no-save cowabunga


Enter fullscreen mode Exit fullscreen mode

二、在包装中:



npm unlink


Enter fullscreen mode Exit fullscreen mode

注意:顺序很重要!

我经常遇到的问题是切换分支后,符号链接找不到包了,所以你陷入了一种奇怪的状态:你无法链接任何东西,也无法取消链接任何东西,因为文件夹不存在。发生这种情况时,请检查你原来的分支,然后从头开始链接包和项目。

🤙

奖励:
您还可以运行



npm install -g i .


Enter fullscreen mode Exit fullscreen mode

在您的包文件夹中进行全局安装,并避免一些链接混乱🎉

鏂囩珷鏉ユ簮锛�https://dev.to/erinbush/npm-linking-and-unlinking-2h1g
PREV
提高大型代码库代码质量的策略
NEXT
有意提交