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

相關文章
相關標籤/搜索