PNPM - nodejs 包管理

文章目录

    • 一、关于 PNPM
      • 开发动机
        • 1、节省磁盘空间
        • 2、提升安装速度
        • 3、创建一个 non-flat node_modules 文件夹
    • 二、安装
      • 通过 npm 安装 pnpm
      • 通过 Homebrew 安装 pnpm
    • 三、pnpm CLI
      • 1、与 npm 的差异
      • 2、参数
        • -C <path>, --dir <path>
        • -w, --workspace-root
      • 3、命令
      • 4、环境变量
    • 四、配置
    • 五、常见 CLI 命令


一、关于 PNPM

pnpm - 速度快、节省磁盘空间的 node 软件包管理器

  • 官网:https://www.pnpm.cn
  • github : https://github.com/pnpm/pnpm
  • 中文说明:https://pnpm.io/zh/

开发动机

1、节省磁盘空间

在这里插入图片描述


当使用 npm 时,如果你有 100 个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要保存 100 份该相同依赖包的副本。然而,如果是使用 pnpm,依赖包将被 存放在一个统一的位置,因此:

  1. 如果你对同一依赖包需要使用不同的版本,则仅有 版本之间不同的文件会被存储起来。例如,如果某个依赖包包含 100 个文件,其发布了一个新 版本,并且新版本中只有一个文件有修改,则 pnpm update 只需要添加一个 新文件到存储中,而不会因为一个文件的修改而保存依赖包的 所有文件。
  2. 所有文件都保存在硬盘上的统一的位置。当安装软件包时, 其包含的所有文件都会硬链接自此位置,而不会占用 额外的硬盘空间。这让你可以在项目之间方便地共享相同版本的 依赖包。

最终结果就是以项目和依赖包的比例来看,你节省了大量的硬盘空间, 并且安装速度也大大提高了!


2、提升安装速度

pnpm 分三个阶段进行安装:

  • 依赖项解析。识别所有需要的依赖项并将其获取到存储中。
  • 目录结构计算。根据依赖关系计算 node_modules 目录结构。
  • 链接依赖项。获取所有剩余的依赖项,并将其从存储区硬链接到 node_modules。

在这里插入图片描述


与传统的解析、获取和将所有依赖关系写入 node_modules 的三阶段安装过程相比,这种方法要快得多。

在这里插入图片描述


3、创建一个 non-flat node_modules 文件夹

当使用 npm 或 Yarn Classic 安装依赖包时,所有软件包都将被提升到 node_modules 的 根目录下。其结果是,源码可以访问 本不属于当前项目所设定的依赖包。

默认情况下,pnpm 则是通过使用符号链接的方式仅将项目的直接依赖项添加到 node_modules 的根目录下。

在这里插入图片描述


二、安装

安装详见:https://www.pnpm.cn/installation, 卸载:https://www.pnpm.cn/uninstall


通过 npm 安装 pnpm

提供了 pnpm CLI 的两个包: pnpm@pnpm/exe.

  • pnpm 是一个 pnpm 的ordinary版本, 需要 Node.js 去运行。
  • @pnpm/exe 与 Node.js 打包成一个可执行文件,因此可以在未安装 Node.js 的系统上使用。

npm install -g pnpm

npm install -g @pnpm/exe

通过 Homebrew 安装 pnpm

如果你已经安装了 Homebrew 软件包管理器,则可以使用如下命令赖安装 pnpm:

brew install pnpm

三、pnpm CLI

1、与 npm 的差异

与 npm 不同,pnpm 会验证所有参数。例如,pnpm install --target_arch x64 将运行 失败,由于 --target_arch 不是一个有效的 pnpm install 参数。

但是,某些依赖项可能会使用以 npm_config_ 开头的环境变量,该环境变量 是可以通过 CLI 参数添加的。在这种情况下,假定有如下参数:

  • 直接设置环境变量:npm_config_target_arch=x64 pnpm install
  • 利用 --config. 前缀强制设置参数:pnpm install --config.target_arch=x64

2、参数

-C , --dir

<path> 设置为 pnpm 的运行目录,而不是当前目录。


-w, --workspace-root

Run as if pnpm was started in the root of the workspace instead of the current working directory.


3、命令

有关更多信息,请参见各个 CLI 命令的文档。以下 是一个与 npm 等价命令的对照表,帮助你快速入门:

npm 命令pnpm 等价命令
npm installpnpm install
npm i <pkg>pnpm add
npm run <cmd>pnpm

当你使用一个未知命令时,pnpm 将会查找和该命令具有相同名称的脚本, 因此,pnpm run lintpnpm lint 是一样的。如果没有相同名称的脚本的话, 那么 pnpm 将按照 shell 脚本的形式执行该命令,所以你可以执行类似 pnpm eslint (see pnpm exec) 指令的命令。


4、环境变量

一些与 pnpm 无关的环境变量可能会改变 pnpm 的行为:

  • CI

这些环境变量可能会影响 pnpm 用来存储全局信息的目录:

  • XDG_CACHE_HOME
  • XDG_CONFIG_HOME
  • XDG_DATA_HOME
  • XDG_STATE_HOME

你可以搜索文档,找到利用这些环境变量的设置。


四、配置

pnpm 使用的是 npm 的配置 格式。因此,你应该以 npm 相同的方式来对其进行配置。例如,

pnpm config set store-dir /path/to/.pnpm-store

如果未配置任何存储,则 pnpm 将在同一硬盘上自动创建一个存储。 如果你需要 pnpm 能够跨多个硬盘或文件系统工作, 请阅读 FAQ。

此外,载安装依赖项时,pnpm 与 npm 使用相同的配置。 如果你为 npm 配置了一个私有的软件包注册表, pnpm 也能够获得授权请求,并且无需任何额外的 配置。

除了这些参数外,pnpm 还允许你将所有标记(flags)作为参数使用 (例如,--filter--workspace-concurrency):

workspace-concurrency = 1
filter = @my-scope/*

如需了解更多信息,请参考e config 命令。


五、常见 CLI 命令

  • 管理依赖项
    • pnpm add
    • pnpm install
    • pnpm update
    • pnpm remove
    • pnpm link
    • pnpm unlink
    • pnpm import
    • pnpm rebuild
    • pnpm prune
    • pnpm fetch
    • pnpm install-test
    • pnpm dedupe
  • Patch dependencies
    • pnpm patch
    • pnpm patch-commit
    • pnpm patch-remove
  • 审查依赖项
    • pnpm audit
    • pnpm list
    • pnpm outdated
    • pnpm why
    • pnpm licenses
  • 运行脚本
    • pnpm run
    • pnpm test
    • pnpm exec
    • pnpm dlx
    • pnpm create
    • pnpm start
  • Manage environments
    • pnpm env
  • 杂项
    • pnpm publish
    • pnpm pack
    • pnpm -r, --recursive
    • pnpm server
    • pnpm store
    • pnpm root
    • pnpm bin
    • pnpm setup
    • pnpm init
    • pnpm deploy
    • pnpm doctor
    • pnpm config

2024-04-23(二)

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

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

相关文章

如何监控ANR

在 Android 开发中&#xff0c;“应用程序无响应”&#xff08;ANR&#xff09;是一种常见的问题&#xff0c;当应用程序在主线程上执行过长时间的操作时就会出现。本文将详细介绍ANR的成因&#xff0c;以及如何有效监控和预防这一问题。 什么是ANR&#xff1f; ANR&#xff…

PADS看图常用操作

1.放大缩小&#xff1a; 方法1&#xff0c;CTRL滚轮 方法2&#xff0c;按住滚轮&#xff0c;前后移动鼠标。 方法3&#xff0c;PageUP&#xff0c;PageDown按键 2.PADS layout只显示单层&#xff08;当前层&#xff09;怎么操作&#xff0c;而不显示其他层 第一步&#xff1a;…

Android双向认证配置过程

1&#xff08;可以绕过&#xff09;准备过程 为了让这个教程可以一直复用&#xff0c;打算直接写一个双向认证的APP作为素材。 工具&#xff1a; ●protecle&#xff08;签名文件转换&#xff09; ●keytool&#xff08;java自己就有&#xff09; ●openssl&#xff08;apache里…

使用工具速记

文章目录 一、sqlyoy登录账号信息迁移二、idea导入之前的已配置的idea信息三、设置windows UI大小四、其他 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、sqlyoy登录账号信息迁移 工具(sqlyog上面菜单栏)->导入导出详情->选择要导出的账号…

安卓悬浮窗权限检查

目录 悬浮窗权限代码检测悬浮窗功能 悬浮窗权限 请求了这个权限后&#xff0c;app的权限管理中会有「显示悬浮窗」的权限选项。后面会引导用户去开启这个权限。 <uses-permission android:name"android.permission.SYSTEM_ALERT_WINDOW" />代码检测悬浮窗功能…

算法基础课 贪心算法模板题笔记

AcWing算法基础课 贪心算法模板题笔记 贪心得到的答案 > 最优解 贪心得到的答案 < 最优解 局部最优 -> 全局最优 文章目录 1 区间问题例1&#xff1a;区间选点例2&#xff1a;最大不相交区间数量例3&#xff1a;区间分组例4&#xff1a;区间覆盖 2 Huffman树例&…

2023最新!Git2.40.0于win10环境下的安装

2023最新&#xff01;Git2.40.0于win10环境下的安装 git官网地址&#xff1a;https://git-scm.com/download/win/ 导航 文章目录 2023最新&#xff01;Git2.40.0于win10环境下的安装导航一、下载Git二、安装Git三、检验 一、下载Git Git官网选择自己所需的版本下载 二、安装…

恒驰喜报 | 12强精英对决,恒驰勇夺华为云数字化转型演讲赛亚军

4月28日落幕的“2024年上海销售伙伴赛马专项行动——华为云数字化转型演讲比赛”上&#xff0c;恒驰信息华为云解决方案首席架构师&#xff0c;在上海12家华为云核心伙伴的同台竞技中&#xff0c;凭借对数字化转型及华为云服务的深刻理解&#xff0c;夺得演讲比赛“第二名”的好…

单纯形投影算法

目录 一&#xff0c;任意点到平移坐标轴面的投影 1&#xff0c;求解目标 2&#xff0c;转换变量 3&#xff0c;求解结果 4&#xff0c;f(t)的导数 5&#xff0c;f(t)的最小值 二&#xff0c;任意点到标准单纯形的投影 1&#xff0c;求解目标 2&#xff0c;公式变形 3…

MATLAB数值类型

MATLAB 数值 MATLAB支持各种数字类&#xff0c;包括有符号和无符号整数以及单精度和双精度浮点数。默认情况下&#xff0c;MATLAB将所有数值存储为双精度浮点数。 您可以选择将任何数字或数字数组存储为整数或单精度数字。 所有数值类型都支持基本数组运算和数学运算。 转换…

好看的PPT目录怎么做?推荐2款一键生成目录的AI PPT软件!

一份完整的 PPT 演示文稿&#xff0c;由多个页面组成&#xff0c;包括 PPT 封面页、PPT 目录页、PPT 分隔页&#xff08;PPT 过渡页&#xff09;、PPT 内容页、PPT 结束页&#xff0c;每一个页面类型&#xff0c;在整个 PPT 中起到不同的作用&#xff1a; PPT 封面页是 PPT 的…

蒸镀的氧化硅薄膜为什么有时候是绿色有时候是棕色的?

知识星球&#xff08;星球名&#xff1a;芯片制造与封测社区&#xff0c;星球号&#xff1a;63559049&#xff09;里的学员问&#xff1a;我们用热阻式蒸镀设备镀氧化硅薄膜&#xff0c;出来的颜色有时候会发生变化是什么原因呀&#xff1f;有时候薄膜是绿色有时候是棕色。 氧…

金蝶云星空与旺店通·企业版对接集成付款申请单查询连通创建调拨入库单

金蝶云星空与旺店通企业版对接集成付款申请单查询连通创建调拨入库单 数据源平台:金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&a…

智能物联网与Web3:连接未来数字生活的桥梁

随着科技的不断进步&#xff0c;智能物联网&#xff08;IoT&#xff09;和Web3技术正成为数字化时代的关键驱动力。智能物联网将各种物理设备连接到互联网&#xff0c;使其能够感知环境、收集数据并与其他设备通信&#xff0c;而Web3技术则以去中心化、安全性和透明性为核心&am…

DataX数据采集流程(项目)

目录 1.CDH介绍 2.ClouderaManager架构 3.服务器 4.dataX架构 5.Datax数据处理流程 6.DataX的使用说明 7.Mysql数据切割 8.Mysql数据导入HDFS 9.查询站点 站点页面如下&#xff0c;可进一步查询导入的数据内容 10.dataX-Web访问页面 创建数据库连接 1.CDH介绍 --(…

NDK 入门(二)—— 调音小项目

NDK 入门系列主要介绍 JNI 的相关内容&#xff0c;目录如下&#xff1a; NDK 入门&#xff08;一&#xff09;—— JNI 初探 NDK 入门&#xff08;二&#xff09;—— 调音小项目 NDK 入门&#xff08;三&#xff09;—— JNI 注册与 JNI 线程 NDK 入门&#xff08;四&#xff…

【错题集-编程题】重排字符串(贪心 + 构造)

牛客对应题目链接&#xff1a;重排字符串 (nowcoder.com) 力扣对应题目链接&#xff1a;1054. 距离相等的条形码 - 力扣&#xff08;LeetCode&#xff09; 一、分析题目 二、代码 1、没看题解之前AC的代码 //牛客代码(看了题解之后AC的代码) #include <iostream> #inc…

【Python BUG】connect: permission denied.

问题描述 解决方案 本质是权限问题 sudo密码即可

C语言阶段性测试错题纠正与拓展

引言&#xff1a;在2024年4月26日&#xff0c;我进行了C语言知识的“期末考试”。通过这次考试&#xff0c;我发现了我的知识漏洞。所以&#xff0c;我写下这篇博客来记录我的错题&#xff0c;并进行纠正&#xff0c;然后对于以前遗忘知识的回顾。 更多有关C语言的知识详解可前…

什么是摇摆交易?澳福一篇文章全面解读

摇摆交易是八大外汇交易策略其中一种交易策略。摇摆交易基于这样的想法&#xff0c;交易者希望利用波动范围和趋势市场的优势&#xff0c;通过选择“顶部”和“底部”&#xff0c;交易者可以相应地输入多头和空头头寸。即可以应用局部校正来最大化利润。fpmarkets澳福认为这种交…