[NPM 包管理] corepack 的使用
![[NPM 包管理] corepack 的使用](https://cdn.hashnode.com/res/hashnode/image/upload/v1749891146833/85189779-20ee-40ec-a4e1-04c74fa25d60.png)
简介
个人理解 corepack 是用于接管 npm 包管理器的工具。启用了 corepack ,就可以使用 corepack 来安装、启用、停用包管理器,而不需要 npm install -g
corepack 的本质是 -- 添加和删除 shims 。也就是说,在 corepack 中,开启和停用某个包管理器就相当于添加和删除一些二进制的脚本
使用
这里只介绍一些常用的命令,详情请参考文档:https://github.com/nodejs/corepack#corepack-use-nameversion
corepack enable [<package-manager-name>]
使用该命令可以开启某个包管理器 -- 为某个包管理器添加 shims。如果不指定包管理器的名称,那么默认就会添加所有的包管理器的 shims;shims 的目录在你当前版本的 node 的全局 bin 目录下
这个命令还可以指定 --install-directory 参数,可以将 shims 安装到指定的目录下
corepack disable [<package-manager-name>]
这个命令就是和上面反过来的,移除 shims ,并且同样可以指定 --install-directory 参数,删除指定目录下的 shims
但是!这个命令有一个很重量级的机制,当你一开始并没有使用 corepack 时,例如你使用 npm install -g 安装了包管理器,这些二进制文件就会存放到你当前版本的 node 的全局 bin 目录下。然后你引入了 corepack,但是你想关闭掉 corepack,于是你运行了 disable 命令,然后这个命令就会把你之前用 npm install -g 安装的包管理器的二进制文件也给删掉!!!太逆天了
这就是为什么我说 corepack 的本质就是添加和删除 shims,因为它这种做法就不只是 disable 了自己,而是直接一刀切把二进制文件给删除了,相当的粗暴
可以参考下这个 issue:https://github.com/nodejs/corepack/issues/112
这个 issue 里的这位老哥还写了一个 enhance 版的 corepack 脚本:

![[JS] fetch 不捕获 4xx](https://cdn.hashnode.com/res/hashnode/image/upload/v1752292253648/9db0ffc4-101a-41a9-9484-b3891c2d81b3.png)
![[Node] Mac m 芯片使用 node 14](https://cdn.hashnode.com/res/hashnode/image/upload/v1752243750001/cf2a586a-c5f8-488c-84a7-a3f7068f34b2.jpeg)
![[其他] WSL Interop](https://cdn.hashnode.com/res/hashnode/image/upload/v1752241086475/51441fc0-e5d9-4423-b009-ac9af9a51c04.jpeg)