npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具

简介: npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具。npm 是官方默认的包管理器,提供依赖管理、安装和更新等功能;cnpm 是由阿里巴巴开发的 npm 镜像,专为中国大陆用户优化,解决下载速度慢的问题;pnpm 通过硬链接技术提高安装速度并节省磁盘空间,特别适合磁盘资源紧张的环境。三者命令类似,但各有特色,开发者可根据需求选择合适的工具。

前言

npm:npm全称Node Package Manager,是 Node.js 平台的默认软件包管理器,用于安装、发布和管理 Node.js 应用程序和软件包。它是一个命令行工具,允许开发人员在他们的项目中轻松地管理依赖项、安装软件包、更新软件包版本以及执行其他与软件包相关的任务。npm 是 nodejs 中的一部分,通常与 nodejs 一起安装和更新。当你安装了 nodejs,npm 也随之安装。

cnpm:cnpm(China Node Package Manager)是一个为中国大陆用户定制的 npm(Node Package Manager)镜像,由阿里巴巴的淘宝团队开发和维护。由于 npm 的原始服务器位于国外,对于中国大陆的用户来说,下载和安装 Node.js 包时可能会遇到速度较慢或连接不稳定的问题。为了解决这个问题,cnpm 镜像被创建出来,以提高下载速度和稳定性。对于国内的大型企业内部开发项目,尤其是对网络速度有一定要求且注重稳定性的项目,cnpm是很好的选择。

pnpm:pnpm是一个高效的 npm 包管理工具,它旨在解决包依赖管理时的一些常见问题。与npm和yarn不同,pnpm使用一种称为“符号链接”的方法来管理包依赖,称为硬链接(hard links),这可以节省磁盘空间并提高安装速度,并确保同一个包的不同版本之间共享尽可能多的代码。

  • 当开发人员在本地机器或者小型服务器上进行开发,磁盘空间比较紧张时,pnpm是首选。例如,一些嵌入式开发环境或者老旧设备上的Node.js开发项目,pnpm通过硬链接和符号链接共享依赖项的方式,可以极大地节省磁盘空间。一个包含大量依赖包的项目,使用npm或cnpm可能会占用数GB的磁盘空间,而pnpm可能只需要几百MB。

一. npm

npm是一个命令行工具,允许开发人员在他们的项目中轻松地管理依赖项、安装软件包、更新软件包版本以及执行其他与软件包相关的任务。

1. 初始化项目

首先,初始化一个新的 Node.js 项目,请看

npm init
//初始化生成package.json文件

npm init -y
//初始化,默认确定,省去敲回车的步骤

npm init:初始化一个新的Node.js项目,并创建一个package.json文件,该文件包含了项目的元数据和依赖信息。

2. 安装依赖包

npm install
 //安装所有node_moudles依赖包

npm install axios
//安装axios依赖包
//这会将axios包安装到你的项目中,并在package.json文件的dependencies部分添加一个条目。

npm install :安装指定的包到当前项目中。如果该包在package.json文件中被声明为依赖,则它将被添加到项目的node_modules文件夹中。

补充:
npm config get registry
用于查看当前 npm 使用的镜像源。

3. 卸载依赖包

npm uninstall axios
//移除、卸载axios包

npm uninstall :从当前项目中卸载指定的包。

4. 更新依赖包

npm update
//更新所有依赖包到它们的最新版本

npm update express
//只想更新axios到最新版本

npm update :更新指定的包到最新版本。你也可以使用npm update命令来更新所有依赖包到它们的最新版本。

5. 列出安装包

npm list
//查看你的项目中安装的所有包

npm list --depth=0
//查看顶级依赖
  • npm list:表示列出模块及其依赖关系的命令,列出的是当前项目中安装的所有包及其依赖关系。你可以使用npm list --depth=0来仅显示顶级包,其中的 --depth=0 参数是用来指定展示依赖关系的深度的。
  • --depth=0:是一个参数,用于指定展示依赖关系的深度。在这里,0 表示只显示直接安装的模块,而不显示其依赖的模块。

6. 搜索插件

1、//找一个用于日期处理的包,你可以使用npm search来搜索
npm search date-handling

2、//搜索结果
NAME                      | DESCRIPTION          | AUTHOR          | DATE       | VERSION  | KEYWORDS  
date-fns                  | Modern JavaScript... | date-fns-org    | 2023-04-01 | 2.29.3   | date, date-fns, date-handling, ...  
moment-business-days      | A moment.js plugin...| mbadolato       | 2023-03-15 | 1.0.0    | moment, moment.js, date, date-handling, ...  
date-handling-utilities   | A set of utilities...| some-author     | 2023-02-01 | 1.0.1    | date, date-handling, utilities, ...  
...

3、//安装和使用,找到满足你需求的包,你可以使用 npm install 命令来安装它,然后按照包的文档来使用
npm install date-fns

npm search :在npm注册表中搜索包含指定关键字的包,搜索结果可能包含大量与你的查询相关的包,因此你可能需要浏览前几页的结果来找到最适合你需求的包。同时,也要注意检查包的维护状态、文档质量、社区支持和版本更新频率等因素,以确保你选择的包是可靠和稳定的。

7. 运行脚本

1、//package.json文件中的脚本定义
"scripts": {  
    "start": "node app.js",  
    "test": "mocha tests/*"  
}


2、//运行start脚本(即启动你的应用),你可以使用
npm run start

3、//测试脚本
npm test  
//或者
npm run test

npm run :运行package.json文件中定义的脚本。例如,npm run start将运行名为"start"的脚本。

8. 本段小结

npm 是一个流行的包管理工具,它的社区非常活跃,每天都有大量的包被发布和更新。因此,在使用 npm 时,建议经常查看官方文档和社区资源,以获取最新的信息和最佳实践。

二. cnpm

cnpm 的用法与原始的 npm 几乎完全相同,大多数 npm 命令都可以在 cnpm 中直接使用。cnpm的安装和使用,地址如下,请看

cnpm的安装和使用

1. 域名问题

我们在使用cnpm命令时,需要全局安装 cnpm(China NPM Mirror)并设置淘宝的NPM镜像作为仓库地址,执行以下命令,安装相应插件,请看

npm install -g cnpm -registry=https://registry.npm.taobao.org

但有时候,我们在执行该命令,安装cnpm的时候,会遇到安装不上的情况,如:报错信息

npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED

意思是当你尝试连接到npm仓库时,遇到了SSL证书过期的问题,

原因就是因为,旧的域名 https://npm.taobao.orghttps://registry.npm.taobao.org 已经在 2022 年 5 月 31 日停止服务,需要更换新的镜像服务。

  • 配置新域名

淘宝 NPM 镜像的新域名,请看 https://registry.npmmirror.com/,所以,直接执行设置新域名

npm install -g cnpm -registry=https://registry.npmmirror.com

如果,你之前的 npm/cnpm 使用的是旧域名:

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

这两个域名已经弃用,建议尽快更新你的 npm / cnpm 配置,将镜像源切换到新域名。你可以使用以下命令,来设置新的淘宝 NPM 镜像源,请看

npm config set registry https://registry.npmmirror.com/

2. 镜像设置

如果你使用的是 cnpm,可以这样设置,请看

cnpm config set registry https://registry.npmmirror.com/

完成设置后,你可以通过运行npm get registrycnpm get registry 来验证新的镜像源是否已正确设置。确保你的项目和企业环境中的相关配置也都更新为新的镜像源地址。

3. 镜像源地址

常用的 npmcnpm 镜像源地址,请看

官方源(npm registry):https://registry.npmjs.org/

淘宝NPM镜像源:https://registry.npmmirror.com/

cnpm镜像源:http://r.cnpmjs.org/

阿里云NPM镜像源:https://npm.aliyun.com/

腾讯云NPM镜像源:https://mirrors.cloud.tencent.com/npm/

华为云NPM镜像源:https://mirrors.huaweicloud.com/repository/npm/

网易NPM镜像源:https://mirrors.163.com/npm/

中国科学技术大学开源镜像站:http://mirrors.ustc.edu.cn/npm/

清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/npm/

三. pnpm

pnpm虽然是 npm 的替代品,但它们的功能和用途有所不同。pnpm 则更侧重于提高存储效率和性能,可以根据自己的需求选择使用哪个工具。

1. 主要特性:

  • 速度快:pnpm 通过使用硬链接和高效的存储策略来加快安装速度。
  • 高效利用磁盘空间:由于使用了硬链接,pnpm 可以确保同一个包的不同版本之间共享代码,从而极大地节省了磁盘空间。
  • 支持 monorepo:随着前端工程的日益复杂,越来越多的项目开始使用 monorepo。pnpm 提供了对 monorepo 的原生支持。

2. 常用命令:

安装:

pnpm install:安装项目的所有依赖项。

pnpm add <pkg>:安装指定的软件包及其依赖项。

更新:

pnpm update:根据指定的范围更新软件包的最新版本。如果不带参数,将更新所有依赖项。

pnpm update <pkg>:更新指定的软件包。

删除:

pnpm remove <pkg>:删除指定的软件包及其依赖项。

查看版本信息:

pnpm -v

设置源:

pnpm config set registry <registry-url>:设置 pnpm 的源为指定的注册表地址

运行项目:

pnpm run <script-name>:运行 package.json 中定义的脚本。

可以看到,其实pnpm命令和npm的命令的使用,基本上都一样,不过是把npm换成了pnpm。

目录
相关文章
|
2月前
|
JavaScript
node环境之Error: Cannot find module ‘chalk’ 报错无法解决的问题—-网上说让你npm install chalk 基本是没有用的-优雅草央千澈解决方案
node环境之Error: Cannot find module ‘chalk’ 报错无法解决的问题—-网上说让你npm install chalk 基本是没有用的-优雅草央千澈解决方案
71 13
node环境之Error: Cannot find module ‘chalk’ 报错无法解决的问题—-网上说让你npm install chalk 基本是没有用的-优雅草央千澈解决方案
|
1月前
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
29 3
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
|
3月前
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
73 3
|
3月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
484 9
|
3月前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
149 10
|
4月前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
138 0
|
4月前
|
资源调度 前端开发 安全
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
220 0
2071 verbose node v16.6.0 2072 verbose npm v7.19.1或者 no such file or directory, lstat ‘D:\wor
该博客文章提供了解决在使用npm版本7.19.1时出现的"no such file or directory"错误的具体方法,建议通过降级npm到6.14.8版本来解决问题,并确认了该方法可以成功安装node_modules。
2071 verbose node v16.6.0 2072 verbose npm v7.19.1或者 no such file or directory, lstat ‘D:\wor
|
6月前
|
缓存 JavaScript 前端开发
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
这篇文章介绍了如何解决npm版本与Node.js版本不兼容的问题,提供了查看当前npm和Node.js版本的步骤,以及如何根据Node.js版本选择合适的npm版本并进行升级的详细指导。
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】

热门文章

最新文章

推荐镜像

更多