在項目中使用 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 做用相似,但它們仍然是不一樣的兩個模塊系統,儘量避免混用,以免產生衝突。