无论是前端还是后端领域,代码的包管理都是必不可少的环节。纵观市场,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/n/257589.html