梳理 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 相关路径的主要内容,如果未能解决你的问题,请参考以下文章