[Node] Node.js 包管理工具详解npm yarn cnpm npx pnpm

pnpm安装以及管理多个nodejs版本 阅读详情

🖥️ Node.js专栏:Node.js 初级知识
🧑‍💼 个人简介:一个不甘平庸的平凡人🍬

✨ 个人主页:CoderHing的个人主页

🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️

👉 你的一键三连是我更新的最大动力❤️


目录

1 npm包管理工具

包管理工具npm

常见的属性

依赖的版本管理

2 npm install 原理

Npm install 命令

项目安装

 npm install 原理

Npm install 原理图解析

package-lock.json

npm其他命令

3 yarn cnpm npx

yarn工具

cnpm工具

4 发布自己的包

Npm 发布自己的包

5 pnpm使用和原理

什么是pnpm呢?

硬链接和软链接的概念

pnpm到底做了什么呢?

pnpm创建非扁平的node_modules目录

pnpm的安装和使用

Pnpm的存储store


包管理工具详解npm yarn cnpm npx pnpm

1 npm包管理工具

包管理工具npm

Node Package Manager 就是Node包管理器

目前已经不仅仅是Node包管理器 在前端项目中 我们也在使用它来管理依赖的包

如 vue vue-router vuex express koa react react-dom axions babel webpack

npm的配置文件

我们每一个项目都会有一个对应的配置文件,无论是前端还是后端

 这个配置文件会记录着你项目的名称,版本号,项目描述等

 也会记录项目所依赖的其他库的信息和依赖库的版本号

=> 这个文件就是package.json

常见的属性

必须填写的属性:name version

name

项目的名称

version

当前项目的版本号

description

描述信息,项目的基本描述

author

作者相关信息

license

开源协议

private

记录当前的项目是否私有,为true时 npm不能发布它,防止私有项目或模块发布出去的方式

main

程序的入口,我们使用axios模块,如果有main属性 实际上是找到对应的main属性查找文件

scripts

配置一些脚本命令 以键值对的形式存在;配置后可以通过npm run命令的key来执行

dependencies

指定无论开发环境还是生成环境都需要依赖的包
我们项目实际开发用到的一些苦的模块 vue vuex vue-router react react-dom axios等
与之对应的是 devDependencies

devDependencies

一些包在生成环境是不需要的 如 webpack babel等
我们可以通过 npm install webpack --save-dev将它安装到 这个属性中

peerDependencies

还有一种项目依赖关系是对等依赖,就是 你依赖的一个包,它必须是以另外一个宿主包为前提的,如 element-plus是依赖于vue3的 ant design是依赖于 react  react-dom

engines

指定Node和NPM的版本号 在安装过程中 会先检查对应的引擎版本 如果不符合就报错

依赖的版本管理

我们会发现安装的依赖版本会出现: ^2.2.2或~2.2.2 是什么意思呢?

npm的包通常需要遵从semver版本规范

semver版本规范是X.Y.Z:

X主版本号:当你做了不兼容的API修改(可能不兼容之前的版本)

Y次版本号:当你做了向下兼容的g功能性新增(新功能增加,但是兼容之前的版本)

Z修订号:当你做了向下兼容的问题 修正(没有新功能 修复了之前的版本bug)

^和~的区别:

x.y.z:表示 一个明确的版本号

^x.y.z: 表示x是保持不变的,y和z永远安装最新的版本

~x.y.z: 表示x和y保持不变,z永远安装最新的版本

2 npm install 原理

Npm install 命令

安装npm包分两种情况:

全局安装:npm i webpack -g

局部安装:npm  i webpack

全局安装

全局安装是直接将某个包安装到全局;比如全局安装yarn;

JavaScript
npm i yarn -g

通常使用 npm全局安装的包 都是一些工具包 如: yarn webpack等

并不是类似于axios express koa等库文件

所以全局安装了之后并不能让我们在所有的项目中使用axios等库

项目安装

项目安装会在当前目录下生成一个node_modules文件夹

局部安装分为开发时依赖和生产时依赖

JavaScript
# 默认安装开发和生产依赖
npm i axios
# 开发依赖
npm i webpack -D
# 根据package.json中的依赖包
npm install

 npm install 原理

Npm install <package> 内部原理?

执行 npm install 他背后帮助我们完成了什么操作?

会发现一个称为package-lock.json文件 它的作用是什么?

从npm5开始 npm支持缓存策略(来自yarn的压力)缓存有什么用?

 

Npm install 原理图解析

npm install 检测是否有package-lock.json文件:

没有lock文件

分析依赖关系,因为包可能会依赖其他的包 并且多个包之间会产生相同依赖关系

从registry仓库下载压缩包(设置了镜像 会从镜像服务器中瞎子啊)

获取到压缩包后会对压缩包进行缓存(npm5开始有)

将压缩包解压到项目的node_modules文件夹中(require的查找顺序会在该包下面查找)

有lock文件:

检测lock中包版本是否跟package.json一致(会按照semver版本规范)

不一致-> 会重新构建依赖关系,直接走顶层的流程

一致的-> 会优先查找缓存  要是没找到 会从registry仓库下载 直接走的顶层流程

查找到.会获取缓存中的压缩文件,并将压缩文件解压到node_modules文件夹中

package-lock.json

package-lock.json文件解析:

name:项目名称

version:项目的版本

lockfileVersion:lock文件的版本

requires:使用requires来跟踪模块的依赖关系

当前项目依赖axios 但是axios依赖follow-redireacts

axios中的属性如下:

Version 表示实际安装的axios版本

Resolved 用来记录下载的地址 registry仓库中的位置

requires/dependencies 记录当前模块的依赖

Integrity 用来从缓存中获取索引 在通过索引去获取压缩包文件

npm其他命令

卸载某个依赖包

Npm uninstall package

Npm uninstall package --savs-dev

Npm uninstall package -D

强制重新bulid(重新构建)

Npm rebuild(很少用)

清除缓存

Npm cache clean

3 yarn cnpm npx

yarn工具

另一个node包管理工具yarn:

yarn是由 Facebook Google Exponent 和 Tilde 联合推出一个新的JS包管理工具

yarn是为了弥补早期npm的一些缺陷而出现的

早期的npm存在许多缺陷,如 安装依赖速度慢 版本依赖混乱等

虽然从npm5版本开始 进行了很多的升级改改进 但是依然很多人喜欢使用yarn

 

cnpm工具

由于一些特殊原因,没办法很好的从https://registry.npmjs.org下载需要的包

查看npm镜像:

Npm config get registry # npm config get registry

我们可以直接设置nom的镜像:

Npm config set registry https://registry.npn.taobao.org

大多数人来说 并不希望将npm镜像修改

第一:不太希望随意修改npm原本从官方下来包的渠道

第二:担心某天淘宝的镜像不维护了,又要改来改去

4 发布自己的包

Npm 发布自己的包

注册npm账号:

https://www.npmjs.com/

选择sign up

命令行登录:

Npm login

修改package.json

发布到npm registry上

Npm publish

更新仓库:

1 修改版本号(最好符合semver规范)

2 重新发布

删除发布的包

Npm unpublish

让发布的包过期

Npm deprecate

5 pnpm使用和原理

pnpm解决了 不用每个项目都有一个(节省磁盘空间)

什么是pnpm呢?

pnpm:理解为 performant npm 缩写;

硬链接和软链接的概念

硬链接(hard link):

硬链接:电脑文件系统中的多个文件平等地共享同一个文件存储单元

删除一个文件名字后,还可以用其他名字继续访问该文件

符号链接(软链接soft link Symbolic link)

符号链接 是一类 特殊的文件

包含有一条以绝对路径或者相对路径的形式指向其他文件或者目录的引用

(左图:符号链接 右图:硬链接)

 

pnpm到底做了什么呢?

当使用 npm 或Yarn时 如果有100歌项目 且 所有项目都有一个相同的依赖包,那么你在硬盘上就需要存100份该相同依赖包的副本

如果使用pnpm 依赖包将被 存放在一个统一的位置,因此:

如果你对同一依赖包使用相同的版本 那么自盘上只有这个依赖包的一份文件

同一依赖包需要使用 不同版本 则仅有版本之间不同的文件会被存储起来

所有文件都保存再硬盘上的统一位置:

当安装软件包时候 其包含的所有文件都会硬链接到此位置,而不会占用额外的硬盘空间

这让你可以再项目指尖方便地共享相同版本的 依赖包

 

pnpm创建非扁平的node_modules目录

当使用npm或 Yarn Classic安装依赖包时 所有软件包都将被提升到node_modules的根目录下

源码可以访问 本不属于当前项目所设定的依赖包

 

pnpm的安装和使用

如何安装pnpm?

官网提供了很多种方式来安装pnpm: https://www.pnpm.io/

使用npm

JavaScript
npm install -g pnpm

npm命令

pnpm等价命令

Npm install

Pnpm install

Npm install <pkg>

Pnpm add <pkg>

Npm uninstall <pkg>

Pnpm remove <pkg>

Npm run <cmd>

Pnpm <cmd>

Pnpm的存储store

在pnpm7.0之前,统一的存储位置是 ~/.pnpm-score中的

在pnpm7.0之后,统一的存储位置进行了改变:<pnpm home directory>/store

在Linux上 默认是 ~/local/share/pnpm/store

在Windows上: %LOCALAPPDATA%/pnpm/store

在macOS上:~/Library/pnpm/store

我们可以通过一些命令 获取这个目录:获取当前活跃的store目录

Pnpm store path

另外一个非常重要的store命令是 prune(修剪):从store中删除当前未被引用的包来释放store的空间

Pnpm store prune

从独立安装pnpm到安装NodeJS到构建VUE项目 从命令行独立安装pnpm,到采用pnpm对NodeJS和包进行版本控制,到采用pnpm构建VUE项目。 阅读详情

相关推荐

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm

简明扼要的概述了,包管理工具npm 、 yarn 、 cnpm 、 npx 、 pnpm

凉茶铺的博客 2699

PNPM - nodejs 包管理

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

AI工程化、开源分享、文档翻译、代码笔记 3572

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2026)

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2023)

前端必备小窝 4593

nodejs包管理器pnpm

速度更快,pnpm在安装依赖时,会将依赖包缓存到全局目录,下次安装相同的依赖包时,会直接从缓存中获取,而不会重新下载,从而加快了安装速度。节省磁盘空间,pnpm在安装依赖时,会将依赖包的文件内容进行硬链接,而不是复制,从而节省了磁盘空间。

kongxx的专栏 847

Node.js:pnpm - 速度快、节省磁盘空间的软件包管理器

代码】Node.js:pnpm - 速度快、节省磁盘空间的软件包管理器。

彭世瑜的博客 1657

包管理工具详解 npm、yarn、cnpm、npx、pnpm邂逅Node.js开发,架构,应用场景,安装,版本工具,代码执行,REPL,模块化开发,export,import,模块化

前端coderwhy学习

VAN 245

Debian 12 安装 Node.js 全攻略:npm、pnpm、yarn、bun 一站式配置

在 Linux 服务器或开发机上搭建 JavaScript 运行环境,绕不开 Node.js 的安装与包管理器选型。Debian 作为主流服务器系统,其官方源中的 Node 版本往往滞后且存在权限坑,如何科学地选择安装方式成为关键。本文从 Node.js 环境搭建的基础概念切入,对比 NodeSource、nvm、二进制包三种主流安装策略的适用场景,并系统讲解 npm、npx、yarn、pnpm、cnpm、bun 的安装与共存方案,涵盖 corepack 的使用、国内镜像源配置、PATH 与权限问题等工程实

weixin_33859135的博客 276

管理工具npm与cnpm、npx、nvm、yarn、pnpm的区别

管理工具npm与cnpm、npx、nvm、yarn、pnpm的区别

wwv的博客 2161

【包管理工具详情】

包管理工具

Lining0905的博客 458

linux系统下安装nexus做私服仓库

1.下载地址 官网地址:https://www.sonatype.com/download-oss-sonatype选择相应的版本即可 2.示例环境 linux系统:CentOS 7 JDK: 1.8 Nexus:nexus-3.16.2-01-unix.tar.gz 3.环境安装 从官网上下载安装包拷贝到linux环境中并解压; 如上图,进入bin目录中,然后运行./nexu...

chang18829350947的博客 1581

gsplat在windows本地部署

3DGS的cuda提效和优化内存的版本gsplat,使得在有一定GPU计算能力的电脑上也能够尝尝3DGS的效果。我在2025年的开年之初尝试配置过gsplat,由于过程中遇到很多问题,最终还是有一些windows上字符编码的问题,没有跑通,最近看gsplat的github更新了3DGUT,优化了反射和二次折射,以及适用于非线性相机模型,如鱼眼相机等。在data目录下下载好了360_v2的数据,进入之后images文件夹是原始分辨率的图像,images_2是下采样系数为2的数据,以此类推。

yuleaf_csdn的博客 2372

包管理工具(npm、pnpm、yarn、cnpm)、版本管理工具(nvm、fnm)

包管理工具(npm、pnpm、yarn、cnpm)、版本管理工具(nvm、fnm)

freeking101的博客 4万+

液态神经网络系列(四) | 一条 PyTorch 从零搭建 LTC 细胞

本文详细介绍了如何从零开始用PyTorch实现Liquid Time-constant Networks(LTC)神经元模型。首先将LTC的核心微分方程拆解为输入电导、系统时间常数和数值积分器三个模块,然后逐步构建LTCCell类,包括物理参数初始化、突触参数设置和前向演化过程。文章还展示了如何封装LTCModel处理不规则时间序列,并通过正弦波抗干扰实验验证了LTC模型的优越性。最后讨论了数值稳定性、计算代价等实现细节,并预告了下一篇将探讨使用伴随灵敏度算法优化显存占用的方法。

wyj333333的博客 2070

npm cnpm pnpm npx yarn的区别

npm cnpm pnpm npx yarn的区别

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 5323

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

OpenCV视频防抖算法实现与优化指南

本文详细解析了如何使用OpenCV实现视频防抖算法。通过特征点检测与光流跟踪估算帧间运动,利用滑动平均平滑运动轨迹,并应用仿射变换重塑视频帧。文章提供了完整的代码实现、参数调优指南及黑边处理等优化技巧,帮助开发者高效处理手持拍摄等场景下的视频抖动问题。

weixin_29062823的博客 342

【NPM】详解yarn 、npm 、 npx 、 cnpm 、 pnpm等包管理工具及其差异

yarn 、npm 、 npx 、 cnpm 、 pnpm等包管理工具主要用于帮助开发者高效地管理项目中的各种依赖库、框架、工具以及其他代码模块。这些工具通过自动化的方式处理依赖的下载、安装、更新和卸载,确保项目中使用的每个外部组件都处于正确的版本,并且能够协同工作,避免版本冲突。

VT_馒头的博客 2136

YOLOv13:目标检测的全面攻略与实战指南

本文是关于 YOLOv13 的全攻略文章。先回顾 YOLO 系列发展,点明 YOLOv13 在该系列中的创新地位,阐述其基于 HyperACE、FullPAD 和轻量级卷积替换等技术的独特优势。深入剖析各核心技术原理,通过与其他版本及实际场景对比展现其性能优势。介绍项目结构与使用方式,分享数据增强、锚框优化等实用技巧,并列举安防监控、自动驾驶等领域应用案例。最后总结 YOLOv13 价值,展望目标检测技术未来发展趋势,为读者提供全面的 YOLOv13 学习与实践指导。

邓邓子的博客 3435

npx、npm、cnpm、pnpm、nvm、yarn 整理

关于包管理的分享npx、npm、cnpm、pnpm、nvm、yarn 等的发展历史,性能情况,及使用方法。

yw00yw的博客 924

YOLO11训练中的过拟合识别与应对策略:讲解过拟合的表现、原因及应对方法(如数据增强、正则化、DropOut)

摘要 本文深入探讨了YOLO11目标检测模型中的过拟合问题。首先解析了过拟合的本质,即模型在训练数据上表现优异但泛化能力差的现象,并通过误差分解公式解释了其数学原理。文章详细列举了YOLO11中过拟合的具体表现,包括训练与验证指标分化、检测性能不一致性、置信度分布异常和类别检测不均衡等问题,并提供了对应的可视化诊断方法。 在原因分析部分,重点阐述了模型复杂度与数据规模不匹配、训练数据质量与分布问题以及训练策略不当三大根本原因。特别对比了YOLO11不同版本(n/s/m/l/x)的参数量和推荐最小数据量,指出

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 245

Unity 佳能SDK 及数据获取

3. 把CameraControl 下面只要是绿色的 .cs 文件都复制到Unity 中。1. 填写信息跟官方申请SDK,大概1-2个工作日会邮件回复你。2. 将SDK这两个文件放到 Unity Plugins文件夹。

我知道你很急,但是路要一步步走 1479

一文搞懂 npm、cnpm、yarn、pnpm、npx、nvm 的区别

与 npm 不同,yarn 具有更快的下载速度和更稳定的依赖管理。yarn 使用与 npm 相同的包仓库,可以直接使用 npm 的包。(Node Package Manager):npm 是 Node.js 的默认包管理器,用于安装、发布和管理 JavaScript 包。nvm 可以帮助开发人员在不同的项目中使用不同的 Node.js 版本,以适应项目的需求。:pnpm 是另一个 JavaScript 包管理器,与 npm 和 yarn 不同,它使用硬链接和符号链接来共享依赖项,从而节省磁盘空间。

DiuWang的博客 5115

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

前端常见包管理工具npm、cnpm、npx、yarn、pnpm的原理及区别

对比前端常见包管理工具的原理及常见使用

weixin_65420702的博客 1075

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

npm、npx、yarn、cnpm、pnpm、nvm区别

npx http-server (5) --no-install 参数和--ignore-existing 参数 如果想让 npx 强制使用本地模块,不下载远程模块,可以使用--no-install参数。npx -p lolcatjs -p cowsay [command] (8)-c 参数 如果 npx 安装多个模块,默认情况下,所执行的命令之中,只有第一个可执行项会使用 npx 安装的模块,后面的可执行项还是会交给 Shell 解释。举例来说,npm 提供当前项目的一些环境变量,可以用下面的命令查看。

su_sf99的博客 1545

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

npm,yarn,pnpm,cnpm,nvm,npx包管理器常用命令

前端比较主流的包管理器主要有三个npm,yarn,pnpm多层级依赖,通常发生在依赖之间存在复杂的版本要求时包A依赖于包B@1.0.0包B依赖于包C@2.0.0另一个包D也依赖于C@3.0.0。

ejinxian的专栏 1750

深入理解 npm、cnpm、npx、yarn 和 pnpm:JavaScript 包管理器的对比

CommonJS主要用于服务器端,同步加载模块,适用于Node.js。它的优势在于简单易用,但在浏览器端可能导致页面阻塞。AMD主要用于浏览器端,异步加载模块,避免页面阻塞。它的优势在于适用于大型Web应用程序,但语法相对繁琐。ES模块化是最新的模块化标准,适用于服务器端和浏览器端,具有更好的语法和功能。它的优势在于静态加载、编译时检查和更简洁的语法,但需要浏览器或运行时的支持。在实际项目中,可以根据具体需求和场景选择合适的模块化规范。例如,对于Node.js项目,可以使用CommonJS;

NolanKy 的 技术博客 1465
上一篇: [Node] Node.js JavaScrpt模块化开发
下一篇: [Node] Node.js Webpack和打包过程
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderHing[专注前端]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值