浅谈npm,cnpm,pnpm,npx,nvm,yarn之间的区别

首先做一个基本的分类

|--------------------|------------------|
| 名称 | 描述 |
| npm,cnpm,yarn,pnpm | 都是Javascript包管理器 |
| nvm | 是Node.js版本控制器 |
| npx | 命令行工具 |

I.npm,cnpm,yarn,pnpm

npm (Node Package Manager)

npm是Node.js默认的包管理器,随Node.js的安装会一起安装。使用npm可以安装,发布,管理javascript包

cnpm (China Node Package Manager)

cnpm是由aliyun发布的包管理器,其用法和官方的npm一致,不同的是其使用的是中国的包镜像,官方的npm执行包下载使用的是境外服务器,国内访问速度慢,延迟高,cnpm的出现就是为了解决这一问题。

当然,如果不想替换官方的npm,其实直接更改npm的镜像改为中国镜像也是可以的。

复制代码
npm config set registry https://registry.npmmirror.com

恢复源镜像命令

复制代码
npm config set registry https://registry.npmjs.org/

CNPM官方介绍https://developer.aliyun.com/article/1599824

yarn (Yet Another Resources Manager)

yarn 是由 Facebook 开发的另一个 JavaScript 包管理器。与 npm 不同,yarn 具有更快的下载速度和更稳定的依赖管理。它还引入了一些新的功能,如离线模式、并行安装等。yarn 使用与 npm 相同的包仓库,可以直接使用 npm 的包。

pnpm (Performant npm(高性能npm))

pnpm 是另一个 JavaScript 包管理器,与 npm 和 yarn 不同,它使用硬链接和符号链接来共享依赖项,从而节省磁盘空间。pnpm 还具有更快的安装速度和更低的网络流量消耗。它也可以使用 npm 的包仓库。

II.npx (Node Package Execute)

npx 是 npm 5.2.0 版本引入的一个命令行工具。它允许你在不全局安装包的情况下运行命令行工具。npx 可以直接运行安装在项目中的依赖包,而不需要手动设置环境变量或全局安装。

E.g.:

没有npx的时候 你想使用一个叫 create-react-app 的工具来创建一个 React 项目。你必须先全局安装它

复制代码
npm install -g create-react-app

然后,再用这个工具

复制代码
create-react-app my-app

有了npx,你就可以直接这样

复制代码
npx create-react-app my-app

III. nvm (Node Version Manager)

nvm 是 Node Version Manager 的缩写,它是一个用于在同一台电脑上管理多个 Node.js 版本 的工具。你可以使用 nvm 在不同的项目中使用不同的 Node.js 版本来运行程序。

为什么需要 nvm?

有时候你会遇到这样的问题:

  • 项目 A 需要使用 Node.js v16.x
  • 项目 B 需要使用 Node.js v18.x
  • 项目 C 需要使用 Node.js v20.x

如果你只能安装一个版本的 Node.js,就会很不方便。这时候 nvm 就派上用场了!

相关推荐
爱勇宝2 小时前
小红花成长新版:模板来了,鼓励也更容易开始
前端·后端·程序员
竹林8183 小时前
Solana前端开发:我在一个NFT铸造页面上被@solana/web3.js的Connection和Transaction签名坑了两天
前端
冬奇Lab3 小时前
每日一个开源项目(第144篇):ai-website-cloner-template - 一条命令、多 Agent 并行,把任意网站逆向成 Next.js 代码
前端·人工智能·开源
玄玄子3 小时前
webpack publicPath作用原理
前端·webpack·程序员
HduSy3 小时前
帮 Claude Code 做了个菜单栏 Token 看板,聊聊里面的一些实现逻辑
前端
用户059540174463 小时前
用了6个月LangChain,才发现AI Agent的记忆存储一直有坑——写了23个Pytest用例才彻底修好
前端·css
奶油mm3 小时前
我偷偷把公司的祖传 jQuery 项目改成了 Vue3,CTO 没发现,但全组都来抄我的代码了
前端
用户2136610035723 小时前
Vue2非父子通信与动态组件
前端·vue.js
PedroQue994 小时前
Vite插件体系1.0.0:API稳定,生产就绪
前端·vite
用户059540174464 小时前
把LLM记忆测试从手工脚本换成Pytest参数化,回归时间从2小时降到10分钟
前端·css