npm、cnpm、yarn 安裝刪除異同

背景

一直以爲npm、cnpm、yarn的安裝刪除基本同樣用哪一個都行,不過俗話說的好,實踐出真知,這裏記錄一下今天簡單測試獲得的結果總結。node

可能會有錯誤,但願你們評論指正,十分感謝。shell

測試電腦系統:Macnpm

初始化

步驟:在三個文件夾裏分別執行如下命令json

npm init測試

cnpm initspa

yarn init3d

結果都是添加了一個package.json文件code

安裝包

步驟:在三個文件夾裏分別用三種命令安裝包,而後在不一樣文件夾換命令安裝,查看文件變化狀況blog

npm i dayjsci

  1. 較其餘兩種方式速度慢些
  2. 自動生成了package-lock.json
  3. node_modules中只有一個dayjs包
  4. dependencies依賴裏有dayjs

yarn add moment 安裝成功,package-lock.json中沒有moment版本鎖

cnpm i dayjs

  1. 沒有生成lock文件
  2. node_modules裏有兩個包(不重要)
  3. dayjs沒有加入到dependencies中,使用cnpm i dayjs -S才能加進去

yarn add dayjs

  1. 生成了yarn.lock文件
  2. node_modules裏有dayjs包和.yarn-integrity文件(感受是存儲依賴版本的hash值,yarn check --integrity可能會用到)
  3. dependencies依賴裏有dayjs

npm i moment 安裝成功,yarn.lock中沒有moment版本鎖

刪除包

刪除步驟嘗試略多,不贅述,直接一塊兒總結。

測試結果

  1. 以下圖,上面是npm、yarn安裝的包,下面是cnpm安裝的包
  2. npm i xxx 默認參數爲 -S,改變package.json和package-lock.json,同時會刪除掉cnpm安裝的包(無論cnpm是否帶參)
  3. npm r xxx,改變package.json和package-lock.json,刪除存在與依賴的包時,同時會把沒有在依賴裏的其餘包刪除掉(好比沒有加參數的用cnpm安裝的包),有在依賴裏的其餘包會被更新
    變成
  4. cnpm i xxx / cnpm r xxx 只能安裝 / 刪除包,不改變任何配置文件
  5. cnpm i xxx / cnpm r xxx 帶 -S / -D 參數時,只改變package.json,不改變鎖文件
  6. yarn add xxx 默認參數爲 -S,改變package.json和yarn.lock
  7. yarn remove xxx 找不到沒有寫入package.json依賴的包,沒法刪除;寫入package.json依賴的能夠刪除
  8. yarn remove xxx 改變package.json和package-lock.json,刪除存在與依賴的包時,同時會把沒有在依賴裏的其餘包刪除掉(好比沒有加參數的用cnpm安裝的包),有在依賴裏的其餘包會被更新

✨理論總結✨

能改變package.json的命令

  1. npm、yarn
  2. cnpm帶 -S / -D 參數時

鎖文件的改變

  1. package-lock.json文件只由npm改變
  2. yarn.lock文件只由yarn改變
  3. cnpm帶不帶參數都沒法影響兩個鎖文件

cnpm安裝的包會受到的影響

  1. npm、yarn安裝包時會把cnpm不帶 -S / -D 安裝的其餘包刪除
  2. npm、yarn刪除包時會把cnpm不帶 -S / -D 安裝的其餘包刪除,有在依賴裏的cnpm安裝的其餘包會被更新
  3. npm安裝包時會把cnpm帶 -S / -D 安裝的其餘包刪除,但package.json裏依賴不會被刪除,這時再執行npm刪除,會按照依賴把誤刪的其餘包裝回來,可是繼續安裝不會裝回來。(ps:有點秀~)
  4. yarn安裝包時會把cnpm帶 -S / -D 安裝的其餘包更新
  5. npm能直接刪除cnpm不帶 -S / -D 安裝的包
  6. yarn不能直接刪除cnpm不帶 -S / -D 安裝的包,會提示找不到包

(cnpm帶不帶 -S / -D歸根結底是有沒有在package.json中添加依賴)


附一個小知識

yarn check                  //檢查package.json裏的依賴版本和yarn.lock裏是否一致
yarn check --integrity  //檢查package.json裏的依賴版本的hash值和yarn.lock裏是否一致,有助於驗證包依賴沒有更改
相關文章
相關標籤/搜索