使用 yarn global 代替 npm -g

在项目中使用 yarn 代替 npm 没什么坑,可是使用 yarn 全局安装模块的时候有些东西须要注意一下:node

yarn global

首先,yarn 的全局安装并非加 -g 或者 --global 这样的参数,它使用 yarn global 命令。用 yarn global --help 能够看到子命令列表typescript

Usage: yarn global [add|bin|ls|remove|upgrade] [flags]

这些子命令的用法和非 global 的同名命令用法差很少。npm

全局 node_modules 的位置

yarn 的全局 node_modules 位置和 npm 的不一样,可是我没有什么好的方法去寻找它。不过我注意到系统的 PATH 中有 C:/Users/james/AppData/Local/Yarn/.bin,这大概是在安装 yarn 的时候安装程序配置进去的。所以,我猜想 C:/Users/james/AppData/Local/Yarn 会存在全局的相关东西。缓存

注意1:路径中的 james 是个人 Windows 用户名,这须要改为你本身当前登陆的用户的用户目录。
注意2:为了不 Markdown 的转义问题,路径中的使用了斜线(除号)分隔目录,实际应该是反斜线bash

先使用 yarn global add 随便安装两个模块,而后进入 C:/Users/james/AppData/Local/Yarn 去搜索,把 yarn 的全局 node_modules 目录定位到了 C:/Users/james/AppData/Local/Yarn/config/global。顺便也找到了 yarn 的缓存目录 C:/Users/james/AppData/Local/Yarn/cache命令行

但其实咱们并不须要关心全局模块放在哪里,由于若是须要删除模块,用 yarn global remove 就好,若是须要清除缓存,用 yarn cache clean 就好。code

指定 bin 目录

对于一些带 CLI 的模块,经过 yarn global add 可能会出问题,大概是由于默认的全局 bin 目录是 C:/Program Files/nodejs(用 yarn global bin 命令就能够查出来)。然而多是由于权限问题,模块对应的 .cmd 文件并不能建立到 C:/Program Files/nodejs 中去。ip

这个时候能够经过 --prefix 参数来指定 bin 目录。既然 PATH 中都配置了 C:/Users/james/AppData/Local/Yarn/.bin,就直接指定到这个目录好了。以安装 typescript 为例rem

yarn global add typescript --prefix C:/Users/james/AppData/Local/Yarn/.bin

其实每次都要写这么长一个路径挺烦人的,因此不妨把它设置成一个 Windows 环境变量(或用户环境变量),好比叫 YARN_BIN,而后直接在 --prefix 参数中指定 %YARN_BIN% 就好。若是是临时设置环境变量能够在命令行使用 set 命令设置,好比get

set YARN_BIN=C:/Users/james/AppData/Local/Yarn/.bin
yarn global add typescript --prefix %YARN_BIN%

注意不要与 npm 产生冲突

npm 的 bin 路径在 C:/Users/james/AppData/Roaming/npm,因此我曾经想把 yarn 的 bin 路径指向这里,然而结果是让我删掉了整个这个目录,从新装了一遍 node.js(为了重装 npm)。

yarn 会把 C:/Users/james/AppData/Roaming/npm/node_modules 目录的结构改掉,并把以前用 npm 安装的一些模块删除掉,包括 npm 自己依赖的模块,最终致使 npm 不可用。

总的来讲,虽然 npm 和 yarn 做用相似,但它们仍然是不一样的两个模块系统,尽量避免混用,以免产生冲突。

相关文章
相关标签/搜索