在项目中使用 yarn 代替 npm 没什么坑,但是使用 yarn 全局安装模块的时候有些东西需要注意一下:
yarn global
首先,yarn 的全局安装并不是加 -g
或者 --global
这样的参数,它使用 yarn global 命令。用 yarn global --help
可以看到子命令列表
Usage: yarn global [add|bin|ls|remove|upgrade] [flags]
这些子命令的用法和非 global 的同名命令用法差不多。
全局 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 的转义问题,路径中的使用了斜线(除号)分隔目录,实际应该是反斜线
先使用 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
就好。
指定 bin 目录
对于一些带 CLI 的模块,通过 yarn global add
可能会出问题,大概是因为默认的全局 bin 目录是 C:/Program Files/nodejs
(用 yarn global bin
命令就可以查出来)。然而可能是因为权限问题,模块对应的 .cmd
文件并不能创建到 C:/Program Files/nodejs
中去。
这个时候可以通过 --prefix
参数来指定 bin
目录。既然 PATH 中都配置了 C:/Users/james/AppData/Local/Yarn/.bin
,就直接指定到这个目录好了。以安装 typescript
为例
yarn global add typescript --prefix C:/Users/james/AppData/Local/Yarn/.bin
其实每次都要写这么长一个路径挺烦人的,所以不妨把它设置成一个 Windows 环境变量(或用户环境变量),比如叫 YARN_BIN
,然后直接在 --prefix
参数中指定 %YARN_BIN%
就好。如果是临时设置环境变量可以在命令行使用 set
命令设置,比如
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 作用类似,但它们仍然是不同的两个模块系统,尽可能避免混用,以避免产生冲突。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。