npm、yarn、cnpm、npx的详解

本文深入介绍了npm包管理器的基础知识及使用技巧,包括npm的工作原理、配置文件package.json的详细解释、依赖版本管理规则以及如何发布自己的npm包等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天对自己多问几个为什么,总是有着想象不到的收获。 一个菜鸟小白的成长之路(copyer)

摘抄于coderwhy老师

包管理工具npm

简介:

npm管理的包存放地址:

  • 发布自己的包是发布到 registry
  • 安装的包就是重 registry上下载的

npm的配置文件(package.json

对于一个项目,需要很多的npm包,所以需要一个配置文件来管理。

  • 配置文件会记录着你的项目的名称版本号项目描述
  • 也会记录着项目的所有依赖的其他库的信息依赖库的版本号

得到配置文件(package.json)

  • 方式一: 手动从零创建项目 npm init [-y]
  • 方式二: 通过脚手架创建项目,脚手架会帮助我们生产package.json,并且里面有着相关的配置

注意:配置文件里面的name不能为中文


常见的属性

必须写的属性: nameversion

  • name是项目的名称
  • version 是当前项目的版本号
  • description 是描述信息(对项目的简单描述)
  • author 作者的基本信息(发布时用到)
  • license 是开源协议(发布时用到)

private属性

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

main属性

设置程序的入口, 安装模块的时候,知道模块的入口文件

scripts属性

  • scripts 属性用于配置一些脚本命令,以键值对的形式存在
  • 配置后,可以通过 npm run [key]来执行这个命令
  • npm startnpm run start的区别:
    • 等价的
    • 对于常用的startteststoprestart 可以直接省略掉 run 直接通过 npm start等方式运行

dependenices属性

  • dependencies属性是指定无论开发环境还是生产环境都需要依赖的包
  • 比如 vue、vuex、react、react-dom等等

devDependencies属性

  • 一些包在生产环境是不需要的,比如webpack,babel等
  • 这个时候我们会通过 npm install webpck --sase-dev,将它安装到devDependencies属性

peerDependencies属性

  • 项目依赖关系是对等关系,也就是你依赖的一个包,它必须是以另外一个宿主包为前提的
  • 比如element-plus是依赖于vue3 的,antd 是依赖于 react,react-dom
  • 安装 element-plus的同时,也必须安装 vue3

依赖的版本管理

在安装的过程中,在配置文件中,会发现 ^2.0.3~2.0.3,这是什么意思呢

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

semver版本规范是X.Y.Z

  • X 主版本号 (major): 当你做了不兼容的API修改(可能不兼容之前的版本) vue2vue3的区别
  • Y次版本号(minor): 当你做了 向下兼容的功能性新增(新功能增加,但是兼容之前的版本)
  • Z修订号(patch): 当你做了向下兼容的问题修正(没有新功能,修复了之前版本的bug)

^~的区别

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

npm install 命令

安装的npm包分为两种:

  • 全局安装(global install): npm install webpack -g
  • 局部安装(local install): npm install webpack

全局安装:只是针对于工具包子类的,并不为了在所有的项目中使用

局部安装: 就是针对当前项目使用


项目安装

开发时依赖

npm install axios 等价于 npm install axios --save 等价于 npm install axios -S

生产时依赖

npm install webpack --save-dev 等价于 npm install webpack -D


npm install 的原理

  • 执行npm install 他背后帮助我们完成了上面操作?
  • 还会发现生成一个 package-lock.json的文件,它的作用是什么呢
  • 从npm5开始,npm支持缓存策略,缓存有什么作用呢

先看一张图(coderwhy制作)

在这里插入图片描述

看着上面的图,就是分为两种情况,是否有 package-lock.json文件

情况一:没有lock文件

执行npm install的时候,

就会先检查各个包之间的依赖,构成依赖图,

然后从 registry仓库中,下载压缩包,添加到本地的缓存中,

接着就会压缩到node_modules

同时还会生成 package-lock.json文件。

安装就完成了。

情况二: 有lock文件

存在 lock 文件,

先检查包的版本号,然后检查包的各自之间的依赖,构成依赖图

查看依赖的图的一致性:

  • 不一致: 就会直接去 registry仓库中重新下载,然后更新本地的缓存,也会跟新生成lock文件。

  • 一致: 就会去版本的缓存文件中去查找,拿取到压缩包,压缩到node_modules中,完成安装。


查看本地缓存的仓库

npm get cache
// 会获取到本地的仓库的路径

在这里插入图片描述

然后就点击进去,_cacache文件夹,

在这里插入图片描述

lock文件 存在一个加密的索引值,然后就是 index文件中去寻找压缩包的索引值,拿着压缩包的索引值就去content里面找。


清除缓存

npm cache clean

yarn 工具

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

  • 出现主要是解决npm的不足之处

  • npm在npm5中,也在逐渐的优化

  • yarn也有lock文件,就是yarn.lock


npm 命令和 yarn 命令的对比

在这里插入图片描述

不推荐 yarn 和 npm 在一个项目中都使用,package-lock.jsonyarn.lock有点差别。


cnpm工具

registry这个仓库是在国外的,所以我们有时下载的时候,会很慢,甚至有可能下载不下来,所以就需要设置国内提供的镜像(大概10分钟,跟新一次)

// 查看仓库地址
npm config get registry

//设置仓库地址
npm config set registry https://registry.npm.taobao.org

但是,npm这个工具仓库地址是国外的,那么就需要借助一个工具,来设置国内的地址

npm install -g cnpm
cnpm config get registry    // 查看
cnpm config set registry    // 设置
npm install -g cnpm --registry=https://registry.npm.taobao.org

npx工具

npx是npm5.2之后自带的一个命令。

  • npx的作用非常多,但是比较常见的是使用它来调用项目中的某个模块的命令

举例:

全局安装webpack 5.x.x

局部安装 webpack 3.x.x


如果在终端执行 webpack --version使用的哪个版本呢

  • 会显示 webpack5.x.x,就是全局的
  • 在当前目录中找不到webpack时,就会去电脑的环境变量里面去找,执行

局部命令的执行

方式一:在终端中使用命令(在项目的根目录下)

./node_modules/.bin/webpack --version

方式二:修改package.json中的scripts

"scripts": {
    "webpack": "webpack --version"
}

方式三: 使用npx

npx webpack --version

npx的原理非常简单,它会到当前目录的node_modules/.bin目录下查找对应的命令


npm 发布自己的包

  • 注册npm账号

  • 在终端中 输入命名

    npm login

    就需要填写用户名和密码

  • 修改package.json ,也就是版本号(不修改版本号,是不支持的(覆盖以前的版本), 报错)

  • 发布到 npm registry 上

    npm publish

  • 更新仓库

    • 修改版本号(最好符合semver规范)
    • 重新发布
  • 删除发布的包

    npm unpublish

  • 发布过期的包

    npm deprecarte

### npm npm 是 Node.js 的默认包管理器,用于安装、管理和共享 JavaScript 包。 - **安装方式**:npm 通常随 Node.js 一起安装。可以通过访问 [Node.js 官方网站](https://nodejs.org/) 下载并安装 Node.js,npm 将自动包含在内。 - **常用命令**: - `npm install <package-name>`:安装指定包。 - `npm install -g <package-name>`:全局安装指定包。 - `npm update <package-name>`:更新指定包。 - `npm uninstall <package-name>`:卸载指定包。 ### cnpm cnpmnpm 的镜像版本,专为中国用户设计,以提高下载速度。 - **安装方式**: - 使用 npm 安装 cnpm:`npm install -g cnpm` - **常用命令**: - `cnpm install <package-name>`:安装指定包。 - `cnpm install -g <package-name>`:全局安装指定包。 - `cnpm update <package-name>`:更新指定包。 - `cnpm uninstall <package-name>`:卸载指定包。 ### Yarn Yarn 是由 Facebook 开发的包管理器,旨在解决 npm 的性能和安全性问题。 - **安装方式**: - 使用 npm 安装 Yarn:`npm install -g yarn` - 或者使用独立安装脚本: ```bash curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get install yarn ``` - **常用命令**: - `yarn add <package-name>`:安装指定包。 - `yarn global add <package-name>`:全局安装指定包。 - `yarn upgrade <package-name>`:更新指定包。 - `yarn remove <package-name>`:卸载指定包。 ### pnpm pnpm 是一个快速、节省磁盘空间的包管理器,它通过硬链接和符号链接来共享依赖项。 - **安装方式**: - 使用 npm 安装 pnpm:`npm install -g pnpm` - 使用 npx 安装 pnpm:`npx pnpm add -g pnpm` - **常用命令**: - `pnpm add <package-name>`:安装指定包。 - `pnpm add -g <package-name>`:全局安装指定包。 - `pnpm update <package-name>`:更新指定包。 - `pnpm remove <package-name>`:卸载指定包。 ### nvm nvm(Node Version Manager)是一个用于管理多个 Node.js 版本的工具。 - **安装方式**: - 使用 curl 安装 nvm: ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash ``` - 或者使用 wget 安装 nvm: ```bash wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash ``` - 安装完成后,重新加载 shell 配置文件(如 `.bashrc` 或 `.zshrc`):`source ~/.bashrc` - **常用命令**: - `nvm ls-remote`:列出所有可用的 Node.js 版本。 - `nvm install <version>`:安装指定版本的 Node.js。 - `nvm use <version>`:切换到指定版本的 Node.js。 - `nvm alias default <version>`:设置默认使用的 Node.js 版本。 ### 区别 1. **npm** 是 Node.js 的默认包管理器,功能全面但有时会遇到性能瓶颈,尤其是在中国用户群体中。 2. **cnpm** 是 npm 的镜像版本,专门为提高国内用户的下载速度而设计,使用方式与 npm 类似。 3. **Yarn** 提供了更快的安装速度和更好的依赖管理机制,支持并行下载和确定性安装。 4. **pnpm** 通过硬链接和符号链接技术,显著减少了磁盘空间占用,并且保持了与 npm 兼容的 API。 5. **nvm** 不是包管理器,而是用于管理不同版本 Node.js 的工具,允许在同一台机器上轻松切换不同的 Node.js 版本。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值