在项目中使用 yarn 代替 npm 没什么坑,可是使用 yarn 全局安装模块的时候有些东西须要注意一下:node
首先,yarn 的全局安装并非加 -g
或者 --global
这样的参数,它使用 yarn global 命令。用 yarn global --help
能够看到子命令列表typescript
Usage: yarn global [add|bin|ls|remove|upgrade] [flags]
这些子命令的用法和非 global 的同名命令用法差很少。npm
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
对于一些带 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 的 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 做用相似,但它们仍然是不一样的两个模块系统,尽量避免混用,以免产生冲突。