一直以爲npm、cnpm、yarn的安裝刪除基本同樣用哪一個都行,不過俗話說的好,實踐出真知,這裏記錄一下今天簡單測試獲得的結果總結。node
可能會有錯誤,但願你們評論指正,十分感謝。shell
測試電腦系統:Macnpm
步驟:在三個文件夾裏分別執行如下命令json
npm init
測試
cnpm init
spa
yarn init
3d
結果都是添加了一個package.json文件code
步驟:在三個文件夾裏分別用三種命令安裝包,而後在不一樣文件夾換命令安裝,查看文件變化狀況blog
npm i dayjs
ci
- 較其餘兩種方式速度慢些
- 自動生成了package-lock.json
- node_modules中只有一個dayjs包
- dependencies依賴裏有dayjs
yarn add moment
安裝成功,package-lock.json中沒有moment版本鎖
cnpm i dayjs
- 沒有生成lock文件
- node_modules裏有兩個包(不重要)
- dayjs沒有加入到dependencies中,使用
cnpm i dayjs -S
才能加進去
yarn add dayjs
- 生成了yarn.lock文件
- node_modules裏有dayjs包和.yarn-integrity文件(感受是存儲依賴版本的hash值,
yarn check --integrity
可能會用到)- dependencies依賴裏有dayjs
npm i moment
安裝成功,yarn.lock中沒有moment版本鎖
刪除步驟嘗試略多,不贅述,直接一塊兒總結。
npm i xxx
默認參數爲 -S,改變package.json和package-lock.json,同時會刪除掉cnpm安裝的包(無論cnpm是否帶參)npm r xxx
,改變package.json和package-lock.json,刪除存在與依賴的包時,同時會把沒有在依賴裏的其餘包刪除掉(好比沒有加參數的用cnpm安裝的包),有在依賴裏的其餘包會被更新cnpm i xxx / cnpm r xxx
只能安裝 / 刪除包,不改變任何配置文件cnpm i xxx / cnpm r xxx
帶 -S / -D 參數時,只改變package.json,不改變鎖文件yarn add xxx
默認參數爲 -S,改變package.json和yarn.lockyarn remove xxx
找不到沒有寫入package.json依賴的包,沒法刪除;寫入package.json依賴的能夠刪除 yarn remove xxx
改變package.json和package-lock.json,刪除存在與依賴的包時,同時會把沒有在依賴裏的其餘包刪除掉(好比沒有加參數的用cnpm安裝的包),有在依賴裏的其餘包會被更新能改變package.json的命令
- npm、yarn
- cnpm帶 -S / -D 參數時
鎖文件的改變
- package-lock.json文件只由npm改變
- yarn.lock文件只由yarn改變
- cnpm帶不帶參數都沒法影響兩個鎖文件
cnpm安裝的包會受到的影響
- npm、yarn安裝包時會把cnpm不帶 -S / -D 安裝的其餘包刪除
- npm、yarn刪除包時會把cnpm不帶 -S / -D 安裝的其餘包刪除,有在依賴裏的cnpm安裝的其餘包會被更新
- npm安裝包時會把cnpm帶 -S / -D 安裝的其餘包刪除,但package.json裏依賴不會被刪除,這時再執行npm刪除,會按照依賴把誤刪的其餘包裝回來,可是繼續安裝不會裝回來。(ps:有點秀~)
- yarn安裝包時會把cnpm帶 -S / -D 安裝的其餘包更新
- npm能直接刪除cnpm不帶 -S / -D 安裝的包
- yarn不能直接刪除cnpm不帶 -S / -D 安裝的包,會提示找不到包
(cnpm帶不帶 -S / -D歸根結底是有沒有在package.json中添加依賴)
yarn check //檢查package.json裏的依賴版本和yarn.lock裏是否一致 yarn check --integrity //檢查package.json裏的依賴版本的hash值和yarn.lock裏是否一致,有助於驗證包依賴沒有更改