1、yarn的優勢及與npm的區別
首先咱們來講說,爲何好好的npm不用,要使用yarn,固然我目前尚未體會到他的優勢,由於剛剛使用,可是做爲一名小菜鳥,遇到這種更好的技術仍是想使用探究一下,下面咱們來講yarn相較於npm的優勢:node
-
速度快,主要體如今下面兩個方面:webpack
- 並行安裝:不管是npm仍是yarn在執行包的安裝時,都會執行一系列任務。npm是按照隊列執行每一個package,也就是必需要等到當前的package安裝完畢以後才進行下一個package的安裝。而yarn是同步執行全部任務,提升了性能。
- 離線模式:若是以前已經安裝了軟件包,用yarn再次安裝時會從緩存中獲取,不用像npm再從網絡下載了
- 安裝版本統一:爲了防止拉取到不一樣的版本,yarn有一個鎖定文件yarn.lock記錄了被確切安裝上的模塊的版本號。每次只要新增了一個模塊,yarn就會建立或更新yarn.lock這個文件。這麼作就保證了每次拉取同一個項目依賴時,使用的都是一個模塊版本。npm其實也能夠作處處處使用同一個模塊的版本,但須要開發者執行npm shrinkwrap命令。這個命令將會生成一個鎖定文件,在執行npm install時,該鎖定文件會先被讀取,和yarn讀取yarn.lock文件一個道理。npm和yarn的不一樣之處在於,yarn會默認生成這樣的鎖定文件,而npm要經過shrinkwrap命令生成npm-shrinkwrap.json文件,只有當這個文件存在的時候,packages的版本信息纔會記錄和更新。
- 更簡潔的輸出:npm的輸出信息比較冗長。在執行npm install <package>時,命令行上會不斷打印出全部被安裝上的依賴。相比之下,yarn簡潔太多,默認狀況下,結合了emoji直觀且直接的打印出必要的信息,也提供了一些命令供開發者查詢額外的安裝信息。
- 多註冊來源處理:全部的依賴包,無論他被不一樣的庫間接關聯多少次,安裝這個包時,只會從一個註冊來源去裝,要麼是npm要麼是bower,防止出現混亂不一致。
- 更好的語義化:yarn改變了一些npm命令的名稱,好比yarn add/remove,感受上比npm本來的install/uninstall更加易懂清晰。
npm |
yarn |
npm install |
yarn |
npm install webpack --save |
yarn add webpack |
npm uninstall webpack --save |
yarn remove webpack |
npm install webpack --save-dev |
yarn add webpack -dev |
npm update --save |
yarn upgrade |
yarn config set registry 'https://registry.npm.taobao.org'
npm install -g cnpm --registry=http://registry.npm.taobao.org
- 初始化某個項目
yarn init
cnpm init
- 默認安裝項目依賴
yarn
npm install
- 安裝某個依賴,並默認保存到package
yarn add **
npm install ** --save
- 卸載某個項目依賴
yarn remove **
cnpm uninstall ** --save
- 更新某個項目依賴
yarn upgrade **
cnpm update ** --save
- 安裝某個全局項目依賴
yarn global add **
cnpm install ** -g
- 安裝某個特定版本號的項目依賴
yarn add **@
cnpm install **@1.1.1 --save
- 發佈、登陸、登出,一系列npm registry 操做
yarn publish/login/logout
npm publish/login/logout
- 運行某個命令
yarn run/test
npm run/test
2、如何從npm轉換到yarn環境
- 沒有使用過yarn的要先全局安裝yarn
npm install -g yarn
- 在已存在npm的項目中運行yarn,至關於yarn install
yarn (運行成功後會在項目根目錄下生成yarn.lock文件)
- 這時候會報錯,什麼node_modules/webpack-dev-server/node_modules/ansi-regex/index.js找不到之類的,我是絞盡腦汁,找了半天錯誤到底在哪裏,啊啊啊啊,後來只是從新運行就行了,fuck!你運氣好的話可能不會報錯哈哈哈哈。插入一個小知識,這個是由於咱們的域名寫死了端口號,因此咱們必須用固定的端口號啓動,否則打不開頁面。so,mac下查看進程的命令:sudo lsof -i:8086;殺死進程的命令:sudo kill -9 24830
- 若是你認爲yarn不適合你,你仍可以回去使用npm,並不須要作任何的變化。若是這個項目沒有人須要使用yarn,那麼你就能夠刪除你的yarn.lock文檔
- 若是你的同伴在項目中仍是使用npm,而你用yarn,那麼yarn.lock和package.lock.js直接都提交就行了。