成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

越來越流行的 Pnpm,了解一下

開發 前端
前端開發用的包管理工具是 npm(Node Package Manager),應付普通的開發還是不錯的。

大家好,我是前端西瓜哥。今天我們來認識一下 pnpm 包。它是一個包管理工具,但卻逐漸流行,讓我們看看它到底做了什么驚人之舉。

pnpm 為何能流行

快速和輕量

前端開發用的包管理工具是 npm(Node Package Manager),應付普通的開發還是不錯的。

但也有不少痛點,于是 yarn 輪子被造了出來。它通過并行下載和緩存解決了 npm 下載慢的問題,并引入 lockfile 機制解決安裝版本號不固定導致一些錯誤的問題。當然,這些問題也被 npm 的后續版本跟進改善了。

但它們還有一個比較重要的問題沒解決,那就是 包的冗余問題。

如果你在本地安裝了幾十個項目,這些項目的依賴項的安裝都是獨立的,即使這些項目有大量相同版本的依賴包,也是會被安裝多次。

首先這會導致你的容量一般的電腦痛苦不堪。當然更重要的是安裝會很慢,明明本地有,但你就是要去網上下載。如果網速很慢包很大還要下完還要運行一些編譯腳本,那太痛苦了。

pnpm 正是為了解決這個問題,而逐漸流行起來的包管理工具。

它的原理并不復雜,就是將包和版本集中到一個地方保存起來,如果一個項目用到某個版本的包,剛好本地又有,那就通過軟硬鏈接鏈接過去,省去了下載時間和硬盤空間。

幽靈依賴

yarn 和 npm 后來的版本其實也是做了 項目層級的緩存的,就是將一些包的依賴包,把它們放到 node_modules 的最外層,而解決了無限嵌套的問題。那是可能發生幾百個 node_modules 遞歸的場景的,太可怕了。

但這種解法,又導致了 幽靈依賴 的問題。

比如我裝個 a 包,我居然就能用 b。為什么?因為 a 依賴 b,然后 b 被裝在 node_modules 最外層,根據 nodejs 找包的機制,我們就能用這個 b 庫。

如果 a 更新后不再依賴 b,b 就不會被安裝,而我們的項目剛好用到它,那就找不到然后報錯了。

另外,node_modules 下最外層的包只能有一個版本,如果某個包依賴的是其他版本,那不好意思,緩存失效,要下載另一個版本放在這個包自己的 node_modules 下。

pnpm 天然能解決這種問題,node_module 下,首先有一個 .pnpm 的文件,通過包名 + 版本號,指向唯一的全局緩存。然后 node_modules 下的包指向 .pnpm 下對應的特定版本的包。

看下圖,安裝 axios 包時帶上了它的很多依賴包,但我們用 .pnpm 做了隔離,所以訪問不到 axios 依賴的包,解決了幽靈依賴的問題。

圖片

pnpm 簡單使用

然后我們再簡單看看 pnpm 的用法。

安裝

pnpm 的安裝方法在官方文檔寫了很多。但 pnpm 其實也是 npm 下的一個包,所以我更傾向于這樣安裝:

npm install -g pnpm

初始化項目

pnpm init

不用加 -y ,pnpm 直接給你生成好一個 package.json 文件。

我覺得這個優化是不錯的,npm init 如果忘記加上 -y,就要填好長好長的選項才能生成 package.json。說真的我覺得生成一個默認的 package.json,然后在上面改更方便,也不是像 create-react-app 那樣需要根據選項創建一堆文件。

安裝所有依賴

pnpm install

安裝指定包

pnpm install <pkg-name>
# 或用 install 的別名 i
pnpm i <pkg-name>
#
npm add <pkg-name>

你說 install 和 add 有啥區別,我也不太懂。反正我感覺都差不多。

npm 用的是 install 子命令來安裝包,一開始的版本如果不加 --save 是不會往 package.json 加上包信息的,有點坑,在 v5 后默認開啟 --save。

更新包

pnpm update <pkg-name>

運行 npm script

pnpm <cmd>

吸收了 yarn 的優點,簡潔。

卸載包

pnpm remove <pkg-name>
# 或
pnpm rm <pkg-name>

結尾

西瓜哥我啊,最喜歡 pnpm 了,heart heart heart。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2019-10-28 15:10:31

懶人剪輯運動相機移動應用

2021-04-15 13:48:08

視頻監控視頻分析智能安防

2011-04-20 14:54:24

編程語言

2011-04-21 08:59:13

javascriptPythonRuby

2022-01-14 10:50:23

PythonRust編程語言

2010-12-17 09:20:23

主機備份災難恢復

2018-04-13 10:54:17

微型數據中心監控

2017-12-26 15:34:55

2011-12-01 09:33:17

Google微軟

2022-05-17 09:17:45

JS 代碼越來越難讀

2024-02-21 09:44:33

Rust前端

2017-10-27 12:28:14

云端遷移云計算

2022-05-27 11:44:53

JS代碼

2021-08-03 11:09:41

智能手機功能技術

2024-11-19 18:03:04

2022-12-13 11:13:34

數據傳感器

2024-01-12 19:12:46

2018-08-23 07:24:40

MEC多接入邊緣計算網絡邊緣

2010-07-08 09:03:20

openSUSE 11Fedora

2021-05-18 15:12:06

開源軟件云服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91xh98hx 在线 国产 | 亚洲协和影视 | 成人精品毛片国产亚洲av十九禁 | 久久av一区 | 成人在线小视频 | 91热爆在线观看 | 在线一区视频 | 狠狠狠干| 99爱国产 | 亚洲一区二区三区在线 | 久久中文字幕一区 | 国产欧美精品区一区二区三区 | 中文字幕日韩一区 | 亚洲激情在线观看 | 黄网站在线播放 | 一区福利视频 | 黄色一级大片在线免费看产 | 久久久久久综合 | 国产精品夜夜夜一区二区三区尤 | 国产1区2区在线观看 | 欧美精品成人 | 欧美freesex黑人又粗又大 | 国产精品久久久久久久久久99 | 国产日韩欧美 | 91中文在线观看 | 久久综合入口 | 国产一区高清 | 成人黄色电影免费 | 久久青青 | 成人免费观看网站 | 成人在线播放网站 | 国产情品 | 日本黄色大片免费 | 欧美一二三区 | 日韩午夜一区二区三区 | 日韩在线免费视频 | 中文字幕第一页在线 | 亚洲精品久久 | 日韩在线免费播放 | 亚洲在线看 | 国产日韩欧美一区二区 |