自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

pnpm 為何能流行

快速和輕量

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

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

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

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

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

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

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

幽靈依賴

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

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

比如我裝個 a 包,我居然就能用 b。為什么?因為 a 依賴 b,然后 b 被裝在 node_modules 最外層,根據(jù) 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 文件。

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

安裝所有依賴

pnpm install

安裝指定包

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

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

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

更新包

pnpm update <pkg-name>

運行 npm script

pnpm <cmd>

吸收了 yarn 的優(yōu)點,簡潔。

卸載包

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

結尾

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

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

2019-10-28 15:10:31

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

2022-01-14 10:50:23

PythonRust編程語言

2011-04-21 08:59:13

javascriptPythonRuby

2011-04-20 14:54:24

編程語言

2021-04-15 13:48:08

視頻監(jiān)控視頻分析智能安防

2010-12-17 09:20:23

主機備份災難恢復

2018-04-13 10:54:17

微型數(shù)據(jù)中心監(jiān)控

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前端

2021-08-03 11:09:41

智能手機功能技術

2017-10-27 12:28:14

云端遷移云計算

2022-05-27 11:44:53

JS代碼

2024-11-19 18:03:04

2022-12-13 11:13:34

數(shù)據(jù)傳感器

2024-01-12 19:12:46

2018-08-23 07:24:40

MEC多接入邊緣計算網(wǎng)絡邊緣

2010-07-08 09:03:20

openSUSE 11Fedora

2021-05-18 15:12:06

開源軟件云服務
點贊
收藏

51CTO技術棧公眾號