如何卸载使用npm link安装的包?

254

当在包的目录中使用sudo npm link安装节点包时,完成开发后如何卸载该包?

npm link会将该包安装为系统全局包位置(“/usr/local/lib”)中的符号链接。这使您可以在开发过程中测试包,而无需反复安装它。

我需要运行哪个npm命令来再次删除链接?

9个回答

274

该软件包可以使用与卸载已安装软件包相同的卸载rm命令进行卸载。唯一需要记住的是链接需要全局卸载 - 需要提供--global标志。

为了卸载全局链接的foo软件包,可以使用以下命令(根据您的设置和权限可能需要使用sudo

sudo npm rm --global foo

这将卸载该软件包。

要检查一个软件包是否已经安装,可以使用npm ls命令:

npm ls --global foo

15
如果您不确定链接的包名称,您也可以执行 npm ls --global --depth 0 列出所有顶层依赖项。 - schu34
1
这对我来说不起作用,因为权限问题,即使使用 sudo 也是如此。我创建了缺失的目录,并使用虚拟的 package.json 文件填充了 nameversion 字段(name 应与包名称匹配,version 可以是任何值)。在该文件夹中,我运行了 npm link && npm unlink 命令,然后它就可以工作了。 - silvenon
从本地库文件夹中卸载npm uninstall也可以正常工作。 - backslashN
1
如果您使用类似于nvm的工具安装node,则不需要使用sudo - bmaupin
2
npm list -g --depth=1 对我有用。 - Neil
使用最新版本的Node,您应该使用:npm rm --location=global foo - Manjar

178

6
“unlink”和“rm”对于npm来说不是一样的吗?它们在man手册中是同一个页面(与“uninstall”共享)。 - nwinkler
1
@nwinkler,你能分享一个链接吗? - Blair Anderson
17
npm源代码使用rm、unlink、remove、r和un作为卸载(uninstall)的别名:https://github.com/npm/npm/blob/a964fe1a3bf3fb617c396fe508c531f6dfcc628f/lib/npm.js#L69 - 可以参考第66行及其之后的内容。 - nwinkler
3
执行 npm unlinknpm install 并不能解决问题。 - element11
4
npm unlink 删除了我的包。 - Saiansh Singh
显示剩余2条评论

32

npm link痛点:

- 模块名:gulp-task

- 项目名:project-x


您想要链接 gulp-task

1:进入 gulp-task 目录,然后执行 npm link 命令,将该项目建立软链接到全局模块。

2:进入项目 project-x,然后执行 npm install 命令,确保删除当前的 node_modules 目录。


现在您想要取消链接并使用真正的 gulp-task,我们有两个选项:

选项 1:通过 npm 取消链接:

1:进入项目目录,执行 npm unlink gulp-task 命令,将已链接的安装模块移除。

2:进入 gulp-task 目录,执行 npm unlink 命令,以移除软链接。 注意:没有使用模块名称

3:庆祝一下。


如果这种方法不起作用,请通过定位全局已安装模块进行验证。我的路径为 ls -la /usr/local/lib/node_modules/,如果您使用 nvm,则路径可能不同。


选项 2:像普通 Linux 神一样移除软链接

1:定位全局依赖 cd /usr/local/lib/node_modules/

2:使用 rm 命令来删除软链接。

rm gulp-task 确保结尾没有/

rm gulp-task/ 是错误的

rm gulp-task ✔️


执行普通的 npm-unlink 命令会删除我项目中的 所有 包。 - cst1992
@cst1992,你所做的与 npm uninstall 相同。 - hastrb

6
这对我很有用:
  1. 检查npm全局包列表:

    npm ls --global

  2. 卸载您的软件包:

    npm uninstall --global my-package

  3. 进入您的测试环境并取消链接已链接的软件包:

    npm unlink my-package

  4. 导航到您的测试环境目录并重新安装软件包:

    npm install

  5. 重新启动您的测试环境服务器


1
非常清晰简洁! - Dale Ryan

6

npm uninstall --global my-package


请参见“完全基于代码的答案解释”。虽然这可能在技术上是正确的,但它并没有解释为什么它可以解决问题或应该被选为答案。我们应该在帮助解决问题的同时进行教育。 - the Tin Man

3
你可以使用“unlink”命令撤销“link”命令。

创建链接

在包中

cd ./some-package
npm link 

在消费者领域
cd ./some-project 
npm link some-package 

删除链接

删除链接应该按照相反的顺序进行 - 从消费者开始。

cd ./some-project 
npm unlink some-package 

在软件包中

cd ./some-package
npm unlink 

1
如果您使用链接来覆盖现有的包,这将使您失去该包的已发布版本。您需要执行 npm unlink some-package && npm install some-package。即使如此,您仍然需要使用 npm rm --global some-package 命令删除全局包。 - akaltar

1
如果你在修改了generator-webapp之后不小心执行了npm link,你可以通过克隆正确的生成器并链接那个来修复它。
git clone https://github.com/yeoman/generator-webapp.git;
# for fixing generator-webapp, replace with your required repository
cd generator-webapp;
npm link;

1

“npm install”会用npmjs中在你的package.json中指定的版本替换所有已安装的依赖项,而这些依赖项是通过“npm link”安装在node_modules中的。


1
OP 询问如何卸载使用 npm link 安装的包,而不是 npm link somepackage。你所建议的方法会将该包留在全局 node_modules 中。 - kroiz

0

有很多答案,但没有一个考虑到有人想要在package.json中保留相同名称的包的情况。

在取消链接后仍想在package.json中保留my-linked-module的正确工作流程:

首先按照npm link的常规步骤进行操作,我不会在这里重复写出来。

然后:

npm link my-linked-module
# do some work with the linked module

# time to unlink, but KEEP package.json unchanged
npm unlink my-linked-module --no-save
# and then need to install to get the old unlinked version back
npm install

测试通过 npm 9.5.1 进行了测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接