背景 一直覺得npm、cnpm、yarn的安裝刪除基本一樣用哪個都行,不過俗話說的好,實踐出真知,這裡記錄一下今天簡單測試得到的結果總結。 可能會有錯誤,希望大家評論指正,十分感謝。 測試電腦系統:Mac 初始化 步驟:在三個文件夾里分別執行以下命令 結果都是添加了一個package.json文件 ...
背景
一直覺得npm、cnpm、yarn的安裝刪除基本一樣用哪個都行,不過俗話說的好,實踐出真知,這裡記錄一下今天簡單測試得到的結果總結。
可能會有錯誤,希望大家評論指正,十分感謝。
測試電腦系統:Mac
初始化
步驟:在三個文件夾里分別執行以下命令
npm init
cnpm init
yarn init
結果都是添加了一個package.json文件
安裝包
步驟:在三個文件夾里分別用三種命令安裝包,然後在不同文件夾換命令安裝,查看文件變化情況
npm i dayjs
- 較其他兩種方式速度慢些
- 自動生成了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、yarn安裝的包,下麵是cnpm安裝的包
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里是否一致,有助於驗證包依賴沒有更改