修改Yarn和npm的全局安装和缓存位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改Yarn和npm的全局安装和缓存位置相关的知识,希望对你有一定的参考价值。

参考技术A

在CMD命令行中执行

在我们使用 全局安装 包的时候,会在 “D:\\Software\\yarn\\global” 下 生成 node_modules.bin 目录

我们需要将 D:\\Software\\yarn\\global\\node_modules.bin 整个目录 添加到系统环境变量中去,否则通过yarn 添加的全局包 在cmd 中是找不到的。

检查当前yarn 的 bin的 位置

yarn global bin
检查当前 yarn 的 全局安装位置

yarn global dir

在安装好node.js 和npm包管理工具后。

使用

查看,安装完成后的路径。

AppData 是隐藏文件夹, 在控制面板,设置显示隐藏文件,才看得到。

为了保留C盘的剩余空间,有必要,把 npm的 global 路径修改到其他盘符下。

修改完成之后,再次 npm config ls 就会看到变化。而且 .npmrc 文件也会有变化,这个文件在C盘的用户目录下,比如 C:\\Users\\Administrator。

yarn如何全局安装命令以及和环境变量的关系

npm全局安装

npm i -g xxx

yarn 全局安装

yarn global add xxx

然而你可能会发现npm全局安装后的命令可以直接使用,而yarn却不行,这是为什么呢?

我们来查看下npm和yarn的bin目录

 技术分享图片

bin是binary的缩写,意思是存放二进制可执行文件的目录,比如exe,msi等,而npm,yarn全局安装的命令就会从这里面开始查找可执行文件。

那为什么系统会从这个路径下进行查找可执行文件呢?这就要说下环境变量。

简单的说计算机在执行命令的时候是在环境变量找对应的命令的位置的。如果不正确设置环境变量就不能正确使用相应的命令。如果觉得麻烦可以安装IDE,这样一般就不用自己手动设置环境变量了
如果执行某个命令,系统无法在当前文件夹里找到对应的.exe(可执行文件),那么系统就会去环境变量path包含的路径找挨个找看是否能知道对应的.exe,一旦找到第一个对应的.exe就运行命令,其他的路径下就不找了。如果找不到你就会看到“系统找不到某某命令”的提示。

而在安装node的过程,安装进程会自动的增加node和npm的路径到环境变量,如下图:

技术分享图片

所以我们使用npm安装的全局命令,可以直接使用,无需再配置环境变量。

 

打开bin目录可以发现我们刚刚全局安装的文件

技术分享图片

 

 注意:使用cnpm安装的yarn,如果要卸载,需要使用npm卸载,cnpm卸载不了,卸载完成,需要重启命令行工具。

总结下 yarn的安装方法:

方法1. 官网下载msi文件,双击安装,安装成功后既可全局使用yarn命令

方法2. 使用npm安装yarn

npm i -g yarn

注意:

  1. 使用方法1安装后需要重启命令行工具,命令行工具会重新加载环境变量。
  2. 方法1使用的是yarn的安装目录 C:Program Files (x86)Yarnin 寻找到可执行文件,同时方法1会新建bin目录并在用户变量内增加bin地址
  3. 方法2使用的是npm的bin地址启动
  4. 方法2在安装新命令时,才去新建yarn的bin目录
  5. 使用方法2,yarn全局安装命令需要配置环境变量,将 yarn global bin 的地址配置到用户变量内,然后重启命令行工具

 

yarn和npm属于两个不同的模块,不要把依靠他们安装的模块混在一起了,如果一个模块的安装比较混乱,导致这个模块的命令不能全局使用,可以尝试一下方法:

  • 在npm, cnpm,yarn中分别卸载该模块
  • 查看计算机程序和功能中是否安装此模块软件,进行卸载
  • 重新安装
  • 重启命令行工具
  • 如果还不行,就检查环境变量,看该模块的目录是否在环境变量中,如果不在,进行添加,然后再重启命令行工具

以上是关于修改Yarn和npm的全局安装和缓存位置的主要内容,如果未能解决你的问题,请参考以下文章

yarn 全局安装命令报错文件名、目录名或卷标语法不正确

npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?

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

yarn 配置全局安装位置到D盘,解决tsc找不到问题。

yarn 创建项目16/16文件名目录名或卷标语法不正确。

yarn 创建项目16/16文件名目录名或卷标语法不正确。