NPM 链接和取消链接
在工作中,我们管理和维护自己的 npm 包。作为开发流程的一部分,在更大的项目中测试包至关重要,以确保其能够按预期运行并满足我们的所有标准。我一直在使用的一个便捷技巧是使用 链接本地 npm 包npm link
。
然而,由于每天都有多个任务同时进行,我经常遇到权限问题,导致包无法使用。说实话,这真的很烦人。这是因为我经常切换分支,而且切换之前没有清理本地环境。
以下是链接和取消链接的具体步骤,以便您可以避免我所经历的#struggle。
假设我们有一个npm
正在本地处理的包,我们称之为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" | |
} |
{ | |
"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" | |
} |
你会注意到这个包有它自己的node_modules
文件夹——这就是我一直犯的错误。我切换了我的包所在的仓库的分支,node_modules
由于构建了其他不在两个分支上的组件,这个文件夹就会消失。当我取消链接时,npm 会抛出权限错误,如下所示:
npm ERR! enoent ENOENT: no such file or directory, access ‘my_project/node_modules/cowabunga/node_modules/some-package’
为了避免这种情况,你必须遵循链接/取消链接的顺序,否则 npm 会尝试取消链接不再存在的文件夹。这看起来很简单,但搞清楚却出奇地繁琐。
链接:
首先,在cowabunga文件夹(package.json 所在的位置)中:
npm link
然后在您想要包含cowabunga 的项目中:
npm link cowabunga
解除链接:
在切换分支和/或从包本身删除任何节点模块之前learn clean
(在我的项目中,这包括运行删除node_modules
文件夹的操作)
首先,在项目中:
npm unlink --no-save cowabunga
二、在包装中:
npm unlink
注意:顺序很重要!
我经常遇到的问题是切换分支后,符号链接找不到包了,所以你陷入了一种奇怪的状态:你无法链接任何东西,也无法取消链接任何东西,因为文件夹不存在。发生这种情况时,请检查你原来的分支,然后从头开始链接包和项目。
🤙
奖励:
您还可以运行
npm install -g i .
在您的包文件夹中进行全局安装,并避免一些链接混乱🎉
鏂囩珷鏉ユ簮锛�https://dev.to/erinbush/npm-linking-and-unlinking-2h1g