09、React系列之--使用yarn包管理工具

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

PS:轉載請注明出處
作者:TigerChain
地址:http://www.lxweimin.com/p/f05eabdf3ab6
本文出自TigerChain簡書

React系列教程

教程簡介

  • 1、閱讀對象

本篇教程適合初學者,老鳥直接略過,如果有誤,歡迎指出,謝謝。

  • 2、教程難度

    初級

正文

1、什么是yarn

yarn是facebook(2016年10月11日)開源的一款代替npm的js包管理工具

2、yarn的特點

相比于node的親兒子npm來說,yarn有以下優勢

  • 1、安裝模塊速度快
  • 2、支持離線模式(只要你安裝過此模塊,第二次安裝就會從緩存文件中直接復制過來)
  • 3、同時兼容 npm 與 bower 工作流,并支持兩種軟件倉庫混合使用

yarn安裝依賴的過程分為三步

  • 1、處理: Yarn 通過向代碼倉庫發送請求,并遞歸查找每個依賴項,從而解決依賴關系。

  • 2、抓取: 接下來,Yarn 會查找全局的緩存目錄,檢查所需的軟件包是否已被下載。如果沒有,Yarn 會抓取對應的壓縮包,并放置在全局的緩存目錄中,因此 Yarn 支持離線安裝,同一個安裝包不需要下載多次。依賴也可以通過 tarball 的壓縮形式放置在源碼控制系統中,以支持完整的離線安裝。

  • 3、生成: 最后,Yarn 從全局緩存中把需要用到的所有文件復制到本地的 node_modules 目錄中。

npm 客戶端把依賴安裝到 node_modules目錄的過程具有不確定性。這意味著當依賴的安裝順序不同時,node_modules 目錄的結構可能會發生變化。這種差異可能會導致類似“我的機子上可以運行,別的機子不行”的情況,并且通常要花費大量時間定位與解決

Yarn 通過 lockfiles 文件以及一個確定性的、可靠的安裝算法,解決了版本問題和 npm 的不確定性問題

3、安裝yarn

1、在mac平臺上

有多種方式,下面介紹兩種

1、第一種方式使用Homebrew安裝

  • 1、使用Homebrew安裝

前提是要安裝Homebrew

brew update
brew install yarn
  • 2、配置環境變量
    添加export PATH="$PATH:yarn global bin"到.profile或 .bashrc 或 .zshrc 文件中,以我的機子為例,打開.zshrc文件添加以下命令
export PATH="$PATH:$HOME/.yarn/bin"
  • 3、查看是否安裝成功

在命令行輸入以下命令,能看到版本信息則證明成功

yarn --version
yarn_version.png

2、第二種方式使用npm安裝

  • 1、使用npm安裝yarn
npm install yarn -g
  • 2、步驟同Homebrew安裝方式
  • 3、步驟同Homebrew安裝方式

2、在win平臺上安裝yarn

  • 1、下載yarn.msi文件

下載地址https://yarnpkg.com/latest.msi

  • 2、點擊一路安裝(前進是你要安裝node)
  • 3、打開cmd輸入yarn --version查看是否安裝成功

3、Linux平臺下安裝yarn

這部分就不說了,非常簡單,也是使用命令行安裝,具體可以看官方安裝方式https://yarnpkg.com/en/docs/install#linux-tab

4、yarn使用

yarn的使用方式和npm大廳相近,就是把npm的使用地方換成yarn并且添加三方模板組件使用是的yarn add xxx

我們來舉例說明yarn是如何使用的,建立一個簡單的demo,以React HelloWorld 項目為例來說明(使用yarn+webpack+babel),在mac環境下,win下面基本上類似

1、新建yarndemo目錄并進入此目錄

mkdir yarndemo
cd yarndemo

2、使用yarn init來初始化項目

yarn init
  • 1、此命令和npm一樣,如果不配置的話一路回車就可以了,效果如下(此處我設置了作者和版權信息,你可以什么也不用設置)
yarn_init.png
  • 2、我們來看看yarndemo目錄下發生了什么變化
yarndemo_director.png

我們可以看到和使用npm init結果是一樣,會創建一個package.json文件

3、添加依賴(以react為例子)

  • 1、安裝依賴,使用yarn add命令
yarn add react react-dom
yarn_add_react.png
  • 2、我們再來看看文件夾中目錄變化
yarn-add-director.png

我們可以看到除了和npm install xxx --save 一樣新建一個node_modules文件夾以外,還創建了一個yarn.lock文件。

  • yarn.lock文件

yarn.lock 鎖定了安裝包的精確版本以及所有依賴項。有了這個文件,你可以確定項目團隊的每個成員都安裝了精確的軟件包版本,部署可以輕松地重現,且沒有意外的 bug,并且這個文件可以使得程序在不同的機器上可以攻取一致的體驗

Yarn 鎖定文件的和安裝算法的存在,確保了將應用程序部署到生產環境時,安裝的依賴在開發機器之間,產生的文件和文件夾結構完全相同。

3、安裝webpack和webpack-dev-server

yarn add webpack webpack-dev-server

4、安裝babel

yarn add babel-core babel-preset-es2015 babel-preset-react babel-loader

5、在根目錄中新建.babelrc并輸入以下內容(不理解的可以看webpack這一節:http://www.lxweimin.com/p/732c4d501668)

{
  "presets":["react","es2015"]
}

6、在yarndemo目錄中分別新建app和public目錄

  • 1、在public中新建index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>yarn demo</title>
</head>
<body>
  <div id="container"></div>
  <script src='./bundle.js'></script>
</body>
</html>

  • 2、在app中新建main.js
import React from 'react' ;
import ReactDOM from 'react-dom' ;

ReactDOM.render(
  <h1>Hello World</h1>,
    document.getElementById('container')
);

  • 7、在根目錄中新建webpack.config.js文件
module.exports = {
  entry: __dirname +"/app/main.js",//唯一的入口文件
    output:{
      path: __dirname +"/public",//打包后文件存放的目錄
      filename:'bundle.js' //打包后輸入的文件名
    },
    devServer:{
     contentBase: "./public",//本地服務器所加載的頁面所在的目錄
     colors: true,//終端中輸出結果為彩色
     historyApiFallback: true,//不跳轉
     inline: true//實時刷新
   },
   //新增加部分
   module:{
     loaders:[
     //babel配置
     {
       test:/\.js$/,
       exclude: /node_modules/,
       loader: 'babel'
     }
   ]
   }
}

  • 8、在package.json中添加script腳本
"scripts":{
    "start":"webpack-dev-server --progress --port 8888"
 }
  • 9、命令行輸入yarn start,打開瀏覽器,輸入localhost:8888查看結果
yarn_hello.png

到此為止,我們就使用yarn+webpack+babel完成了一個簡單的hello world demo,也體驗了一下yarn的使用方式,和npm使用方式差不多,只不過命令不太一樣而已

5、yarn和npm命令對比

NPM YARN 說明
npm init yarn init 初始化某個項目
npm install/link yarn install/link 默認的安裝依賴操作
npm install taco —save yarn add taco 安裝某個依賴,并且默認保存到package.
npm uninstall taco —save yarn remove taco 移除某個依賴項目
npm install taco —save-dev yarn add taco —dev 安裝某個開發時依賴項目
npm update taco —save yarn upgrade taco 更新某個依賴項目
npm install taco --global yarn global add taco 安裝某個全局依賴項目
npm publish/login/logout yarn publish/login/logout 發布/登錄/登出,一系列NPM Registry操作
npm init yarn init 初始化某個項目
npm run/test yarn run/test 運行某個命令,可以在script腳本中去配置

yarn安裝慢的問題

使用以下命令來查看當前的源,默認是:官網

yarn config get registry
# -> https://registry.yarnpkg.com

改成taobao的源

yarn config set registry 'https://registry.npm.taobao.org'

#yarn config v0.17.3
#success Set "registry" to "https://#registry.npm.taobao.org".
#?  Done in 0.06s.

然后使用yarn install就應該快多了。

yarn采坑之旅

1、安裝yarn,我采用npm來安裝(mac系統)

1、全局安裝,這里有好多種安裝方式,我采用npm安裝

npm install yran -g

2、配置環境變量

export PATH="$PATH:$HOME/.yarn/bin" 

將上述命令添加到你的.profile或.bashrc或是.zshrc或其它的文件中,我這里使用的是.zshrc

3、運行yarn --version檢查是否安裝成功,報如下錯

yarn-version-error.png

4、解決辦法

在命令行中運行以下命令:

mkdir ~/Library/Caches/Yarn

最后完美解決

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容