柚子快報(bào)邀請(qǐng)碼778899分享:pnpm實(shí)戰(zhàn)教程
柚子快報(bào)邀請(qǐng)碼778899分享:pnpm實(shí)戰(zhàn)教程
一、概述
1、更小 使用 npm 時(shí),依賴每次被不同的項(xiàng)目使用,都會(huì)重復(fù)安裝一次。 而在使用 pnpm 時(shí),依賴會(huì)被存儲(chǔ)在內(nèi)容可尋址的存儲(chǔ)中。
2、更快
依賴解析。 倉(cāng)庫(kù)中沒(méi)有的依賴都被識(shí)別并獲取到倉(cāng)庫(kù)。目錄結(jié)構(gòu)計(jì)算。 node_modules 目錄結(jié)構(gòu)是根據(jù)依賴計(jì)算出來(lái)的。鏈接依賴項(xiàng)。 所有以前安裝過(guò)的依賴項(xiàng)都會(huì)直接從倉(cāng)庫(kù)中獲取并鏈接到 node_modules。
3、扁平化 使用 npm 或 Yarn Classic 安裝依賴項(xiàng)時(shí),所有的包都被提升到模塊目錄的根目錄。 這樣就導(dǎo)致了一個(gè)問(wèn)題,源碼可以直接訪問(wèn)和修改依賴,而不是作為只讀的項(xiàng)目依賴。
默認(rèn)情況下,pnpm 使用符號(hào)鏈接將項(xiàng)目的直接依賴項(xiàng)添加到模塊目錄的根目錄中。
可以看到cookie在express中被引用時(shí),只是在依賴項(xiàng)中存放了硬鏈接,真正的包是在扁平化的一級(jí)目錄中。
二、安裝
windows下基于npm安裝:
npm i -g pnpm
window下使用獨(dú)立腳本安裝:
iwr https://get.pnpm.io/install.ps1 -useb | iex
//默認(rèn)安裝路徑:`C:\Users\【用戶名】\AppData\Local\pnpm`
//如果想要指定安裝目錄,請(qǐng)?zhí)崆霸O(shè)置環(huán)境變量:【PNPM_HOME】=[指定目錄](méi)
三、配置
pnpm 設(shè)置配置的方式與 npm 相同。并且直接沿用npm的配置,例如,
npm config list
pnpm config list
pnpm config get
pnpm config set
pnpm config delete
可以看到,兩種list命令打印結(jié)果是一模一樣的。
pnpm config list
pnpm config get
pnpm config set
pnpm config delete
四、過(guò)濾
匹配:filter
過(guò)濾允許您將命令限制于包的特定子集??赏ㄟ^(guò) --filter (或 -F) 標(biāo)志制定選擇器:
pnpm -F
pnpm --filter
上面的命令會(huì)進(jìn)入 project1 項(xiàng)目,并且執(zhí)行 pnpm run start 命令。
排除:!
任何過(guò)濾規(guī)則選擇器都可以作為排除項(xiàng),只要在開頭添加一個(gè)"!"。
例如,這將在除 foo 以外的所有項(xiàng)目中運(yùn)行一個(gè)命令:
pnpm --filter=!foo
五、pnpm:devPreinstall腳本
pnpm:devPreinstall 是一個(gè)特殊的生命周期腳本,用于在執(zhí)行 pnpm install 命令時(shí)運(yùn)行。這個(gè)腳本通常用于在安裝依賴之前執(zhí)行一些自定義的操作,例如構(gòu)建或配置過(guò)程。
打開 package.json 文件,在 scripts 部分添加如下代碼:
{
"scripts": {
"pnpm:devPreinstall": "your-command-here"
}
}
六、管理依賴
1、安裝:pnpm add
pnpm add
pnpm add
pnpm add
pnpm add
pnpm add
pnpm add
pnpm add
pnpm add
//從本地安裝
pnpm add ./package.tar.gz
pnpm add ./some-directory
//從遠(yuǎn)端安裝 Tar 包
pnpm add https://github.com/indexzero/forever/tarball/v0.5.6
//從 git 安裝
pnpm add
配置項(xiàng)說(shuō)明:
--save-prod, -P 將指定的軟件包安裝為常規(guī)的 dependencies。 --save-dev, -D 將指定的 packages 安裝為 devDependencies。 --save-optional, -O 將指定的 packages 安裝為 optionalDependencies。 --save-exact, -E 保存的依賴會(huì)被指定為一個(gè)確切的版本, 而不是使用 pnpm 的默認(rèn) semver range operator 配置. --save-peer 使用 --save-peer 會(huì)添加一個(gè)或多個(gè) peerDependencies 的 package 并安裝到 dev dependencies. --ignore-workspace-root-check 使用--ignore-workspace-root-check 或 -w 來(lái)向 workspace 根目錄添加依賴。例如, pnpm add debug -w. --global, -g 安裝全局依賴 --workspace 僅添加在 workspace 找到的依賴項(xiàng).
在全局安裝一些命令行依賴時(shí),命令行對(duì)應(yīng)的bin文件,pnpm默認(rèn)會(huì)復(fù)制一份到PNPM_HOME環(huán)境變量對(duì)應(yīng)的目錄下,例如執(zhí)行:pnpm add express express-generator -g后,根目錄就出現(xiàn)express命令行對(duì)應(yīng)的bin文件:
2、安裝:pnpm install 等同于pnpm i,用于安裝項(xiàng)目所有依賴.
3、更新:pnpm update 別名:up、upgrade。根據(jù)指定的范圍更新軟件包的最新版本。默認(rèn)會(huì)更新所有依賴關(guān)系。
CommandMeaningpnpm up遵循 package.json 指定的范圍更新所有的依賴項(xiàng)pnpm up --latest更新所有依賴項(xiàng),此操作會(huì)忽略 package.json 指定的范圍pnpm up foo@2將 foo 更新到 v2 上的最新版本pnpm up "@babel/*"更新 @babel 范圍內(nèi)的所有依賴項(xiàng)
4、刪除:pnpm remove 別名:rm、uninstall、un 從 node_modules 和項(xiàng)目的 package.json 中刪除相關(guān) packages。
5、連接:pnpm link 別名:ln 使當(dāng)前本地包可在系統(tǒng)范圍內(nèi)或其他位置訪問(wèn)。
pnpm link
pnpm link --global
pnpm link --global
6、取消連接:pnpm unlink 取消鏈接一個(gè)系統(tǒng)范圍的package (相對(duì)于 pnpm link).
7、重建:pnpm rebuild 別名:rb 重建一個(gè)package。
8、修剪:pnpm prune 移除不需要的packages。
9、修改全局包目錄 執(zhí)行下面命令,之后所有的依賴包會(huì)保存到指定目錄中。
pnpm config set store-dir D:\Node\Cache\pnpm\store
https://pnpm.io/zh/next/cli/store
七、查看依賴
1、檢查:pnpm audit
檢查已安裝包的已知安全問(wèn)題。
實(shí)際在使用這個(gè)命令時(shí),淘寶鏡像(https://registry.npmmirror.com/)是不支持檢查的,會(huì)提示如下報(bào)錯(cuò):
在使用npm官方倉(cāng)庫(kù)時(shí),是可以的,顯示如下:
2、打印依賴:pnpm list
別名:ls
此命令會(huì)以一個(gè)樹形結(jié)構(gòu)輸出所有的已安裝package的版本及其依賴。
pnpm ls
pnpm ls -r //遞歸打印工作區(qū)依賴
pnpm ls --depth=0 -r
pnpm ls -g --depth=0
3、打印過(guò)期依賴:pnpm outdated 這個(gè)命令還是比較實(shí)用的,可以檢查package.json中所有依賴包當(dāng)前版本和最新版本。 例如:
上述common1、common2是工作區(qū)中的自定義模塊,所以檢測(cè)不到,其他都有記錄。
4、打印指定包的依賴:pnpm why 顯示依賴于指定 package的所有 package。 例如,下面是打印出工作區(qū)下,所有依賴common2的包。分別是umi-antd項(xiàng)目和web/common1項(xiàng)目。
八、運(yùn)行腳本
1、運(yùn)行:pnpm run 假如您有個(gè) watch 腳本配置在了package.json 中,像這樣:
"scripts": {
"watch": "webpack --watch",
"watch1": "webpack --watch",
"watch3": "webpack --watch",
}
執(zhí)行pnpm run watch。 也可以用正則去匹配執(zhí)行多個(gè)腳本,下面的命令會(huì)匹配所有watch開頭的命令。
pnpm run "/^watch:.*/"
2、執(zhí)行:pnpm exec 在項(xiàng)目范圍內(nèi)執(zhí)行 shell 命令。 例如,項(xiàng)目目錄下node_modules/.bin目錄下有個(gè)max腳本文件。直接執(zhí)行max -v是無(wú)效的,但是可以通過(guò)pnpm exec max -v來(lái)執(zhí)行這個(gè)命令。 pnpm exec [命令名] 類似于 npx [命令名]
3、創(chuàng)建項(xiàng)目:pnpm dlx/pnpm create 這兩個(gè)命令都可以用來(lái)創(chuàng)建項(xiàng)目,例如創(chuàng)建一個(gè)react項(xiàng)目:
pnpm dlx create-react-app ./my-app
pnpm create create-react-app ./my-app
上述兩個(gè)命令執(zhí)行效果一致,都可以初始化一個(gè)react項(xiàng)目,且默認(rèn)安裝好依賴包。 只是pnpm dlx命令支還持一些配置項(xiàng)。
九、管理Node版本
1、配置命令
pnpm env
//cmd:
//use:使用
//remove:刪除
//list:打印全部
這里介紹 window 下需要做的配置:
清除【環(huán)境變量】下PATH中關(guān)于node的設(shè)置安裝系統(tǒng)獨(dú)立腳本。其他平臺(tái)下pnpm安裝教程
//window下打開powershell:
iwr https://get.pnpm.io/install.ps1 -useb | iex
查看可用版本pnpm env ls --remote 安裝需要的版本 pnpm env use -g lts //安裝LTS 版本
pnpm env use -g 16 //安裝 v16:
pnpm env use -g latest //最新版本
移除指定版本:pnpm env remove -g 14.0.0
pnpm全局安裝的包都保存在:C:\Users\【用戶名】\AppData\Local\pnpm目錄下。
2、實(shí)操演練
安裝完獨(dú)立腳本版本的pnpm之后。
安裝穩(wěn)定版本:執(zhí)行pnpm env use -g lts
刪除穩(wěn)定版本:pnpm env rm -g lts 檢查是否移除成功:node -v 此時(shí)node版本已經(jīng)檢測(cè)不出來(lái),說(shuō)明刪除成功。
我之前安裝過(guò)npm并且修改過(guò)cache和prefix,pnpm重新安裝獨(dú)立腳本后,之前的npm config沒(méi)有任何變化,繼續(xù)沿用。
為pnpm,點(diǎn)贊!
十、緩存目錄
1、概述
npm全局安裝
npm i -g lodash
執(zhí)行完后,lodash被存放在npm config get prefix對(duì)應(yīng)的目錄中。
例如:
pnpm全局安裝
pnpm install -g lodash
執(zhí)行完成后,包被存放在:C:\Users\【用戶名】\AppData\Local\pnpm目錄下
2、修改pnpm緩存地址
修改 store 目錄:
pnpm config set store-dir [目錄](méi)
pnpm store path #查看store目錄
修改 cache 目錄: cache緩存默認(rèn)存放在C:\Users\【用戶名】\AppData\Local\pnpm-cache。添加環(huán)境變量【XDG_CACHE_HOME=D:\Node\Cache\pnpm\cache】,之后再安裝的依賴的緩存就都會(huì)存入這個(gè)目錄。從存儲(chǔ)中刪除未引用的包。
pnpm store prune
十一、常見(jiàn)問(wèn)題
1、全局安裝時(shí),報(bào)錯(cuò):?ERR_PNPM_UNEXPECTED_STORE? Unexpected store location
執(zhí)行下面代碼后,再次安裝就好了:
pnpm i -g
pnpm add -g cross-env
推薦閱讀:pnpm官方文檔
柚子快報(bào)邀請(qǐng)碼778899分享:pnpm實(shí)戰(zhàn)教程
文章來(lái)源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。