PNPM 高效入门:安装配置一本通

PNPM高效入门:安装配置一本通

  • 引言
  • Pnpm 简介
  • 安装 PNPM
    • 全局安装(推荐)
    • 使用 nvm(Node Version Manager)
  • 配置PNPM
  • 使用PNPM管理项目
    • 初始化项目
  • 添加依赖
    • 快速安装所有依赖
    • 查看安装的包
  • 优化与故障排除
  • PNPM与持续集成/持续部署(CI/CD)
  • PNPM 的独特优势
  • 结语

在这里插入图片描述

引言

在 Node.js 生态系统中,包管理器扮演着至关重要的角色,而 PNPM 作为新一代的包管理利器,正以其独特的硬链接和存储策略,以及对依赖地狱的有效解决,逐渐成为开发者的新宠。PNPM 结合了 npm 的广泛生态与 Yarn 的高效管理,提供了更快的安装速度和更节省磁盘空间的解决方案。本文将手把手教你 PNPM 的安装、配置及其核心功能,让你在快节奏的开发环境中游刃有余。

pnpm 官网

Pnpm 简介

PNPM(Package Manager),发音为“ pineapple ”,是一个快速、节省磁盘空间的包管理器,它通过引入“内容可寻址的文件系统”概念,确保每次安装都复用相同的依赖,从而大大减少了节点模块的存储占用。PNPM 同时兼容 npm 的 package.jsonpackage-lock.json 格式,无缝衔接现有项目。

安装 PNPM

全局安装(推荐)

使用 npm 安装 PNPM 是最常见的方法,适用于大多数操作系统:

npm install -g pnpm

安装成功后,可以使用下面的命令确认 pnpm 是否安装成功:

pnpm --version

出现 pnpm 的版本信息即为安装成功,如下图:

在这里插入图片描述

使用 nvm(Node Version Manager)

如果你使用 nvm 管理 Node.js 版本,可以通过安装特定版本的 Node.js 来自动获得 PNPM ,因为 nvm 的某些版本集成了 PNPM 。

配置PNPM

PNPM 的配置文件为 .npmrc ,位于项目根目录或用户主目录。默认情况下 PNPM 工作良好,但你可以根据需要调整配置,例如修改仓库源:

registry=https://registry.npm.taobao.org

除了基本配置外,PNPM 还支持一系列高级选项,用于优化项目性能和开发体验。

  • Shrinkwrap:类似于 npm 的 package-lock.json ,PNPM 使用 pnpm-lock.yaml 来锁定依赖版本,确保跨环境一致性。通过运行 pnpm lock ,可以生成或更新此文件。

  • Workspace 管理:PNPM 强大的 workspace 功能允许你在一个 monorepo(单一仓库多项目)中管理多个包,简化跨包依赖和统一版本控制。

    pnpm workspace <package_name> add <dependency>
    
  • Parallelization(并行处理):PNPM 在安装过程中充分利用系统资源,通过并行下载和安装包,进一步加速过程。

使用PNPM管理项目

初始化项目

在新项目目录下,运行以下命令初始化 PNPM 环境:

pnpm init

添加依赖

添加依赖与 npm 相似,但更高效:

pnpm add <package_name>

快速安装所有依赖

PNPM 安装速度极快,且首次安装后再次安装几乎瞬间完成:

pnpm install

查看安装的包

查看已安装的包及其版本:

pnpm ls

优化与故障排除

  • 清理缓存:随着时间推移,PNPM 的缓存可能会占用大量磁盘空间。使用 pnpm cache clean 或指定 --force 参数来彻底清理。
  • 解决依赖冲突:当遇到依赖版本不一致导致的问题时,检查 pnpm-lock.yaml 文件,理解冲突来源,并通过调整 resolutions 字段强制指定依赖版本。

PNPM与持续集成/持续部署(CI/CD)

在 CI 环境中,PNPM 同样表现出色。由于其高效和一致性,可以显著减少构建时间和资源消耗。

  • CI 中的安装命令:确保 CI 脚本中使用 pnpm install --frozen-lockfile 来防止意外的依赖变更。
  • Docker 集成:在 Docker 镜像中预安装 PNPM ,可以进一步加速 CI 流程。使用轻量级的基础镜像,并在 Dockerfile 中添加安装命令。

PNPM 的独特优势

  • 节省空间:通过硬链接和文件复制,避免重复的依赖。
  • 一致性:确保所有开发者的依赖树完全相同。
  • 速度快:利用本地缓存,后续安装近乎瞬时。
  • 兼容性:与 npm 和 Yarn 的 lock 文件兼容。

基于以上的这些 pnpm 独特优势,博主本人在工作和学习上,使用 pmpm 会多一点,也更推荐大家使用 pnpm ,但是具体使用情况需要根据自身的喜好去选定。

结语

PNPM 以其独特的优势,正在逐步改变我们管理 Node.js 项目依赖的方式。通过本篇文章的学习,相信你已经掌握了 PNPM 的安装、配置以及基本操作,准备好迎接一个更为高效、整洁的开发环境。PNPM 不仅能够提升你的开发效率,还能有效解决长期困扰开发者的依赖问题,是每个现代 Node.js 开发者不可或缺的工具。现在,带着这份攻略,开启你的高速开发之旅吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/799939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nest.js 实战 (一):使用过滤器优雅地统一处理响应体

前言 在我们实际的业务开发中&#xff0c;我们可以看到后端接口返回格式都有一定的要求&#xff0c;假如我们统一规定接口的统一返回格式为&#xff1a; {data: any; // 业务数据code: number; // 状态码msg: string; // 响应信息timestamp: number; // 时间戳 }那么在 Nest.…

华为HCIP Datacom H12-821 卷40

1.单选题 下面是台路由器BGP错误输出信息&#xff0c;关于这段信息描述错误的是 <HUAWEI>display bgp error Error Type :Peer Error Date/Time :2010-03-22 12:40:39 Peer Address :10.1.1.5 Error Info : Incorrect remote AS A、可能是由于邻居…

Nginx的反向代理缓存

一 .Nginx的反向代理缓存 #代理缓存路径设置缓存保存的目录 #keys_zone设置共享内存占用的空间大小 #max_size缓存大小 #inactice 超过时间,则缓存自动清理 #use_temp_path 关闭临时目录proxy_cache_path /usr/local/nginx/upsteam_cache key_zone=mycache:5m max_size=…

HarmonyOS 屏幕适配设计

1. armonyOS 屏幕适配设计 1.1. 像素单位 &#xff08;1&#xff09;px (Pixels)   px代表屏幕上的像素点&#xff0c;是手机屏幕分辨率的单位&#xff0c;即屏幕物理像素单位。 &#xff08;2&#xff09;vp (Viewport Percentage)   vp是视口百分比单位&#xff0c;基于…

基于单片机的智能医疗监护系统设计

1.简介 随着社会的发展&#xff0c;智能化电子设备成为了人们生活中不可或缺的一部分&#xff0c;尤其是在人们对于身心健康更加注重的今天&#xff0c;智能医疗监护系统应运而生。本套电子监护设备集体温测量、心电采集、心率监测、血氧监测于一体&#xff0c;带有语音播报模块…

图——图的应用01最小生成树(Prim算法与Kruskal算法详解)

这篇文章就来讲一下图的最后的应用章节中的最小生成树&#xff0c;包括Prim算法与Kruskal算法两大部分&#xff0c;在实际问题当中应用很广。在对于前面的内容熟悉的情况下再学习本章比较好哦&#xff0c;图的基本概念&#xff0c;存储结构以及图的遍历。大家可以通过下面的链接…

iPhone数据恢复:如何从iPhone恢复误删除的短信

来自iPhone的意外删除的短信可能很关键。它们可能是来自您常用应用程序、银行交易、付款收据的重要通知&#xff0c;也可能是来自朋友的重要文本、孩子的学校通知等。 如果您也从iPhone丢失了此类消息&#xff0c;我们在这里分享如何在没有备份以及有备份的情况下在iPhone上恢…

JVM和类加载机制-01[JVM底层架构和JVM调优]

JVM底层 Java虚拟机内存模型JVM组成部分五大内存区域各自的作用虚拟机栈(线程栈)栈帧内存区域 本地方法栈程序计数器为什么jvm要设计程序计数器&#xff1f; 堆方法区 JVM优化-堆详解JVM底层垃圾回收机制jvm调优工具jvisualvm.exeArthas工具使用 Java虚拟机内存模型 JVM跨平台原…

go Sync.Pool

sync 包提供了一个强大且可复用的实例池&#xff0c;以减少 GC 压力。在使用该包之前&#xff0c;我们需要在使用池之前和之后对应用程序进行基准测试。这非常重要&#xff0c;因为如果不了解它内部的工作原理&#xff0c;可能会影响性能。 池的限制 type Small struct {a in…

dhtmlx-gantt甘特图数据展示

官网文档&#xff1a;甘特图文档 实现效果&#xff1a; 首先需要下载 dhtmlx-gantt组件 npm i dhtmlx-gantt //我项目中使用的是"dhtmlx-gantt": "^8.0.6" 这个版本&#xff0c;不同的版本api或是文档中存在的方法稍有差异 界面引用 <template>&l…

iOS ------ 类 父类 元类的总结

一&#xff0c;类的定义 类在OC中其实是指向objc_class的结构体指针&#xff0c;结构体构造我 typedef struct objc_class *Class; struct objc_class { Class isa; Class super_class; const char *name; long version; long info; long instance_size; struct obj…

ElementUI el-select 组件动态设置disabled后,高度变更的问题解决办法

问题描述 Vue2 项目在使用 el-select 组件时&#xff0c;动态将disabled变更为了 true&#xff0c;元素的高度发生了变化。 问题原因 通过浏览器开发人员工具面板&#xff0c;发现&#xff0c;组件内的 input 元素被动态设置了height的样式&#xff1a; 在项目中检查后并…

基于STM32设计的超声波测距仪(微信小程序)(186)

基于STM32设计的超声波测距仪(微信小程序)(186) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择1.5 系统框架图…

<数据集>钢板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1986张 标注数量(xml文件个数)&#xff1a;1986 标注数量(txt文件个数)&#xff1a;1986 标注类别数&#xff1a;7 标注类别名称&#xff1a;[crescent gap, silk spot, water spot, weld line, oil spot, punchin…

人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解。在机器学习和深度学习领域&#xff0c;模型的训练目标是找到一组参数&#xff0c;使得模型能够从训练数据中学习到有用的模式&am…

mysql命令练习

创建数据表grade: CREATE TABLE grade( id INT NOT NULL&#xff0c; sex CHAR(1)&#xff0c; firstname VARCHAR(20) NOT NULL&#xff0c; lastname VARCHAR(20) NOT NULL&#xff0c; english FLOAT&#xff0c; math FLOAT, chinese FLOAT )&#xff1b; 向数据表grade中插…

基于springboot与vue的旅游推荐系统与门票售卖

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

图像边缘检测中Sobel算子的原理,并附OpenCV和Matlab的示例代码

Sobel算子是一种用于图像边缘检测的离散微分算子。它结合了图像的平滑处理和微分计算&#xff0c;旨在强调图像中强度变化显著的区域&#xff0c;即边缘。Sobel算子在图像处理中被广泛使用&#xff0c;特别是在计算机视觉和图像分析领域。 Sobel算子的原理 Sobel算子主要用于计…

zookeeper+kafka的消息队列

zookeeperKafka 两个都是消息队列的工具 消息队列 出现原因&#xff1a;生产者产生的消息与消费者处理消息的效率相差很大。为了避免出现数据丢失而设立的中间件。 在消息的生产者与消费之间设置一个系统&#xff0c;负责缓存生产者与消费者之间的消息的缓存。将消息排序。 优…

SpringMVC注解全解析:构建高效Web应用的终极指南 (上)

SpringMVC 是一个强大的 Web 框架&#xff0c;广泛应用于 Java Web 开发中。它通过注解简化了配置&#xff0c;增强了代码的可读性。本文将全面解析 SpringMVC 中常用的注解及其用法&#xff0c;帮助你构建高效的 Web 应用。 一. MVC介绍 MVC 是 Model View Controller 的缩写…