無論是前端還是後端領域,代碼的包管理都是必不可少的環節。縱觀市場,NPM是目前最流行的包管理器之一,然而,它的行為卻經常讓開發者頭疼不已。PNPM作為一款新興的、具有全新設計思路的包管理器,為什麼值得我們更加的關注呢?本文從多個方面對PNPM進行詳細的闡述。
一、快速的包依賴安裝
在NPM的使用中,幾乎所有包的下載都是存放在全局路徑中的,而這種方式會導致相同的模塊在不同項目中進行了重複下載,也會導致包的版本衝突。而PNPM極大的提升了依賴包的下載速度,以及佔用更少的磁碟空間。
如下所示是使用NPM下載packages.json文件包依賴的命令,經過數十秒才能完成:
npm install
而PNPM僅需要一條命令就能完成包的安裝並生成.lockfile,不僅僅提高了效率,還保證了開發環境的穩定性:
pnpm install
它的優勢在於 PNPM 的包依賴被存放在了單獨的項目中,當需要安裝第三方庫時,PNPM會在自己的緩存中尋找是否存在該文件,只有在緩存中不存在的時候才會從外部拉取該包,這也是PNPM能夠提供快速的包依賴安裝的重要原因。
如果您想進一步了解PNPM的包依賴安裝過程,可以參考官方文檔Point of View of the User – How does pnpm work?
二、依賴管理與命令執行
對於一個具有多個項目的開發人員來說,經常需要切換到不同的工作空間,這個時候,NPM的包依賴管理就顯得非常麻煩。但是,在PNPM中,你可以通過命令行來管理不同項目之間不同的依賴版本。具體如下所示:
# 進入項目A
cd /path/to/projectA
# 項目A 安裝依賴
pnpm install
# 進入項目B
cd /path/to/projectB
# 項目B 安裝依賴
pnpm install
# 回到項目A
cd /path/to/projectA
pnpm run dev
# 回到項目B
cd /path/to/projectB
pnpm run start
這樣,不同的項目之間就不會出現依賴版本的衝突了。
三、全局模塊的問題
使用NPM時,全局模塊經常會帶來麻煩。全局模塊不僅限制了應用程序的可移植性,還可能導致升級過程失效。這是因為每個全局模塊都可能被稱為全局可見,即使你從另一個項目中刪除了這個模塊,它仍然可能被其他的應用程序使用。此外,全局模塊的許可權管理非常困難,因此,在生產設備上的軟體部署容易出錯。
而PNPM支持在每個項目內部安裝依賴,這使得使用PNPM的項目具有更高的可移植性。一旦部署完成,應用程序的依賴關係不受全局模塊的影響,所有依賴關係都被限制在每個項目的本地文件系統中。這將大大簡化軟體部署,並使它更加容易和可靠。
四、支持Workspaces特性
PNPM完全支持NPM Workspaces特性,這也是它的一個重要優勢。Workspaces是為了解決多個相互依賴的項目之間耦合程度太高的問題,工作空間可以讓你在同一倉庫中維護多個子項目,既提高依賴項安裝的效率,又方便了代碼的維護和管理。
下面是一個使用工作區的示例:
{
"name": "example",
"version": "0.0.1",
"description": "My example workspace package",
"private": true,
"workspaces": [
"packages/*"
]
}
example文件夾下還有「packages」文件夾,在 packages 文件夾中的每一個 JavaScript 項目會作為好像它是獨立的 npm 包一樣來處理。這裡面,可以按照需要更新依賴項。比如,可以使用不同的依賴項版本,或者甚至替換其中的依賴項。
五、PNPM的優勢總結
PNPM為開發者提供了一種更加人性化、更加簡單的包管理方式,具有如下幾個優勢:
- PNPM快速而有效地安裝依賴項,實現了本地安裝。
- PNPM支持同一項目內的多個依賴關係。
- PNPM不僅限於NPM的包管理器,還支持Yarn的語法。
- PNPM同時支持NPM Workspaces的特性,深度集成實現簡單、可管理的Monorepo。
- PNPM使用npm-style包描述符,這與NPM類似,使得PNPM易於使用和移植。
- PNPM部署到生產環境中時,不會在安裝和運行時出現許可權問題。
結語
總的來說,PNPM在包管理方面提供了更快、更有效、更可靠的解決方案。無論你是前端開發還是後端開發,它都是你的有力幫手。如果你還沒有體驗過PNPM的強大功能,趕快行動吧。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257589.html