梳理 node、npm、yarn 相关路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梳理 node、npm、yarn 相关路径相关的知识,希望对你有一定的参考价值。

参考技术A 如果你对 npm、yarn 全局安装路径存疑,很混乱分不清,那么这篇文章应该能帮到你。本文以 macOS 为例,不同操作系统可能略有差异。

其实在安装完 Node 之后,便有类似提示:

可以得知 Node 和 NPM 的默认安装路径是 /usr/local/bin 。如果 /usr/local/bin 路径并不存在于环境变量 PATH 中,需在配置文件中写入。比如:

具体配置文件是 ~/.bash_profile 还是 ~/.zshrc ,取决于你当前使用哪一种 Shell 解析器。

使用 which 命令可查看「可执行文件」的路径,比如:

其中 /usr/local/bin 目录下的可执行文件多是软链接,并非文件真正所在路径。

说明一下,本文将以这种方式安装的 Node 称为系统版本的 Node,用于区别使用 nvm 安装的 Node。

从 npm Docs 官方文档中,对「全局安装」如何存放文件都有比较清晰的描述( 详看 ),翻译过来就是:

其中 prefix 是 npm 的一个配置项( 详见 ),它的默认值与 Node 的安装位置有关。在 Unix/Linux/Mac 操作系统中,通常是 /usr/local 。在 Windows 操作系统上通常是 %AppData%\npm 。其中「可执行文件」是指 package.json 中 bin 字段的配置项。

使用 npm config 命令可对 prefix 配置进行操作:

也可在配置文件 ~/.npmrc 直接进行修改( 详见 )。

因此,

可通过以下命令查看:

可通过 npm ls 命令查看全局安装的依赖包,个人更喜欢使用其别名 npm list ,原因是它跟 yarn list 一致。

其打印结果为树状形式,可配合 --depth=n 参数使用以查看包的依赖信息,其中 n 表示树状深度。上面的 npm list -g 相当于 npm list -g --depth=0 。

插个话,在 v2 版本有着较大的差异,比如在 v2 版本将 yarn global 移除,其替代者是 yarn dlx ,更多 请看 ,这里不展开赘述了。

yarn 全局安装路径与 npm 不同,默认情况下:

可通过以下命令查看:

若要修改以上配置,可通过 yarn config 命令处理:

需要注意的是,修改全局安装路径的配置 key 是 global-folder ,可执行文件的 key 为 prefix 。别跟 npm 混淆了。

也可以在配置文件 ~/.yarnrc 直接修改:

需要注意的是,其中 npm 配置文件使用的是 ini-formatted 格式,也就是 key=value 形式,而 yarn 则是 key "value" 形式。

我们知道 npm(Node Package Manager)是 Node 包管理工具,而 nvm(Node Version Manager)则是 Node 版本管理工具。它可以通过命令行快速安装、使用不同版本的 Node。

假设有多个项目使用了不同版本的 Node,或者需要在不同版本的 Node 下测试我们开发的 npm 包,那么使用 nvm 将会很高效。其安装不展开细说,请看 官方文档 。

第一节已经介绍了,使用「传统」的方法安装其路径如下:

但如果使用 nvm 来管理 Node,这些都将会发生变化。当使用官方指引来安装 nvm,相关内容将会默认存放至 ~/.nvm 目录。

当使用 nvm install 来安装 Node,比如:

它将会存放于 ~/.nvm/versions/node/v16.14.0 目录下。

切换 system Node 与 nvm Node,只要通过以下方式即可:

我们观察一下 prefix 的变化就知道其安装路径了:

因此,在使用 nvm 管理的情况下:

前面提到过, prefix 的默认位置与 Node 的安装路径有关。比如,在 Unix/Linux/Mac 操作系统中, prefix 通常是 Node 安装路径的上一级,也就是 ~/.nvm/versions/node/vX.X.X 目录。因此,当我们在切换 Node 版本中,它总能正确地安装到 /usr/local/lib/node_modules 或 ~/.nvm/versions/node/vX.X.X/lib/node_modules/ 目录。

但是,如果在 ~/.npmrc 中配置了 prefix ,无论你如何切换 Node 版本,它总是被安装至所配置的路径下。

这样就违背了用 nvm 的初心,自定义 prefix 配置与 nvm 不兼容。nvm 在其官方文档中用指出( 详见 ):

如果你此刻用着 nvm,同时没有意识到这个问题,建议立刻去检查并将其移除。

目前,我同时使用着 nvm、npm、yarn(v1)三个工具,那么平常是这样管理它们的:

基于这种原则下,全局安装的依赖包将有这些路径:

使用以下命令,可查看全局依赖包所在路径:

使用以下命令,可查看已安装的全局依赖包:

到此,本文结束。以上希望可以帮你厘清个中混淆之处。

The end.

以上是关于梳理 node、npm、yarn 相关路径的主要内容,如果未能解决你的问题,请参考以下文章

npm和yarn更改依赖包全局下载和缓存路径

windows下node配置npm全局路径(踩坑)

node npm windows 文件路径太长无法安装包

使用 Yarn 1 编译画布时出现“node-pre-gyp:未找到”

Node.js配置npm全局模块路径和缓存路径

Node.js配置npm全局模块路径和缓存路径