03.包管理器
简版
- 包是模块的集合,用于解决某一方面的问题
- 一个第三方库可以看做是一个包
- 每个包里包含一个或多个模块
包管理
- 每一个包可能有自己的
- github 地址
- 官网
- 版本
- 依赖
- 如何快速下载包?
npm 的缺点
npm install 下载速度慢,即使是重新 install 时速度依旧慢
同一个项目,安装的无法保持一致性。原因是因为 package.json 文件中版本号的特点导致在安装的时候代表不同的含义。
使用 npm 安装多个 js 包时,包会在同一时间下载和安装。安装过程中,其中一个包抛出了一个异常,但 npm 会继续安装其他包,所以错误信息就会在一大堆提示信息中丢失掉,以至于直到执行前,都不会发现实际发生的错误。
yarn 的优点
- 安装速度快 (服务器速度快 , 并且是并行下载)
- 版本锁定,安装版本统一
- 缓存机制,如果之前已经安装过一个软件包,用 Yarn 再次安装时之间从缓存中获取,就不用像 npm 那样再从网络下载了
- 输出简洁并且多注册来源处理。安装包时,直观地打印出必要的信息;不管包被不同的库间接关联引用多少次,只会从一个注册来源去装,防止出现混乱不一致。
cnpm
pnpm
1.pnpm 是 Node.js 的替代包管理器。它是 npm 的直接替代品,但速度更快、效率更高。 2.pnpm 拥有 Yarn 超过 npm 的所有附加功能
熟记
| 命令 | 简写 | 说明 |
|---|---|---|
| 无 | 无 | 将模块安装到本地 node_modules 目录下,但不保存在 package.json 中 |
| --save | -S | 将模块安装到本地 node_modules 目录下,同时保存到 package.json 中的 devDependencies 配置项中,在生产环境下这个包的依赖依然存在 |
| --save--dev | -D | 将模块安装到本地 node_modules 目录下,同时保存到 package.json 中的 devDependencies 配置项中,仅供开发时使用 |
| --global | -g | 安装的模块为全局模块,如果命令行模块,会直接连接到环境变量中 |
npm
npm 全称为 Node Package Manager,是一个基于 Node.js 的包管理器,也是 Node.js 社区最流行、支持的第三方模块最多的包管理器。它的初衷就是让开发人员更容易分享和重用代码。npm 提供了命令行工具,其主要功能是管理 Node.js 包,包括安装、更新、删除、查看、搜索、发布等。
npm 最初只是 Node.js 的包管理器,但随着前端技术的不断发展,它的定位变成了广义的包管理器,可以实现 JavaScript、React、Vue、Gulp、移动开发等包管理,是目前最大、生态最为健全的包管理器。
| 命令 | 作用 |
|---|---|
| npm -v | 查看 npm 版本。 |
| npm init | 初始化后会出现一个 package.json 配置文件。可以在后面加上 -y ,快速跳过问答式界面。 |
| npm install | 根据项目中的 package.json 文件自动下载项目所需的全部依赖。 |
| npm install 包名 --save-dev(npm install 包名 -D) | 安装的包只用于开发环境,不用于生产环境,会出现在 package.json 文件中的 devDependencies 属性中。 |
| npm install 包名 --save(npm install 包名 -S) | 安装的包需要发布到生产环境的,会出现在 package.json 文件中的 dependencies 属性中。 |
| npm list | 查看当前目录下已安装的 node 包。 |
| npm list -g | 查看全局已经安装过的 node 包。 |
| npm --help | 查看 npm 帮助命令。 |
| npm update 包名 | 更新指定包。 |
| npm uninstall 包名 | 卸载指定包。 |
| npm config list | 查看配置信息。 |
| npm info 指定包名 | 查看远程 npm 上指定包的所有版本信息。 |
npm config set registry registry.npm.taobao.org | 修改包下载源,这里修改为了淘宝镜像。 |
| npm root | 查看当前包的安装路径。 |
| npm root -g | 查看全局的包的安装路径。 |
| npm ls 包名 | 查看本地安装的指定包及版本信息,没有显示 empty。 |
| npm ls 包名 -g | 查看全局安装的指定包及版本信息,没有显示 empty。 |
yarn
| 命令 | 作用 |
|---|---|
| yarn -v | 查看包管理器 yarn 的版本信息[-new-version]:直接记录版本号;[--no-git-tag-version]:不生成 git 标签 |
| yarn init [--yes/-y:默认生成 package.json 文件] | 互动式创建/更新 packeage.json 文件 |
| yarn config | 配置 设置:set 键值对,删除:delete,列表:list |
yarn config get registry | 查看包管理器 yarn 的网络仓库网址。 |
yarn config set registry http://registry.npm.taobao.org/[-g | --global] |
| yarn info [--json:json 格式显示结果] | 显示依赖包的信息 |
| yarn global add xxx [--prefix:包路径前缀] | 通过 yarn 全局安装 xxx 包。这个包被安装在了 yarn 的本地全局仓库。 |
| yarn global remove xxx | 通过 yarn 卸载全局安装的 xxx 包。在 yarn 的本地全局仓库的 xxx 包会被移除。 |
| yarn add xxx [--dev/-D] | 通过 yarn 局部安装 xxx 包。 |
| yarn remove xxx | 通过 yarn 局部卸载 xxx 包,更新 package.json 和 yarn.lock |
| yarn install | 安装所有包[--flat]:只安装一个版本[--force]:强制重新下载更新[--har]输出安装时网络性能日志[-no-lockfile]:不生成 yarn.lock 文件[--production]:生产环境安装(不安装 devDependencies 中的依赖) |
| yarn list | 列出已安装依赖包[--depath=0]:列表深度,从 0 开始 |
| yarn run | 运行 package.json 中的预定义的脚本 |
| yarn upgrade | 升级依赖包 |
| yarn bin | 显示 yarn 安装目录 |
| yarn cache | 显示 yarn 缓存 列出缓存包:ls ,打出缓存目录路径:dir,清除缓存 clean |
| yarn check | 检查包 |
| yarn clean | 清理不需要的依赖文件 |
| yarn generate-lock-entry | 生成锁定文件 |
| yarn licenses | 列出已安装依赖包的证书,ls:证书列表,generate-disclaimer:生成免责声明 |
| yarn link | 开发时链接依赖包,以便在其他项目中使用 |
| yarn unlink | 取消链接依赖包 |
| yarn login | 保存你的用户名,邮箱 |
| yarn logout | 删除你的用户名,邮箱 |
| yarn outdated | 检查过时的依赖包 |
| yarn owner | 管理拥有者 |
| yarn pack | 给包的依赖打包 |
| yarn publish | 将包发布到 npm。[--tag]:版本标签,[--access:public/restricted]:公开还是限制 |
| yarn tag | 显示包的标签 |
| yarn team | 管理团队 |
| yarn test(yarrn run test) | 测试 |
| yarn self-update | yarn 自身更新--未实现 |
| yarn why | 分析为什么需要安装依赖包(包名/包目录/包目录中的文件名) |
cnpm
npmmirror 中国镜像站这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10 分钟 一次以保证尽量与官方服务同步。
| 命令 | 作用 |
|---|---|
| cnpm -v | 查看是否安装 cnpm |
| npm install -g cnpm -registry=https://registry.npm.taobao.org | 安装 cnpm |
| cnpm config set registry https://registry.npm.taobao.org | 设置 cnpm 镜像地址为淘宝地址 |
| npm config get registry | 查看设置镜像地址 |
| cnpm install | 安装 |
pnpm
pnpm 官网是 Node.js 的替代包管理器。它是 npm 的直接替代品,但速度更快、效率更高。
- 全局安装
npm install pnpm -g
- 设置源
// 查看源
pnpm config get registry
// 切换淘宝源
pnpm config set registry https://registry.npmmirror.com/
- 使用
pnpm install 包名称
pnpm i 包名称
pnpm add 包名称 // -S 默认写入dependencies
pnpm add -D // -D devDependencies
pnpm add -g // 全局安装
- 移除
pnpm remove 包名称 // 移除包
pnpm remove 包名称 --global // 移除全局包
- 更新
pnpm up // 更新所有依赖项
pnpm upgrade 包 // 更新包
pnpm upgrade 包 --global // 更新全局包
- 设置存储路径
pnpm config set store-dir /path/to/.pnpm-store
- 个人使用
- 一些需要 node-gyp 的包一定要记得安装好
- 在系统上禁止使用脚本解决方法
# 以管理员身份运行power shell
set-executionpolicy remotesigned
npm 和 yarn 使用选择?
大家可以根据不同的场景进行选择
个人项目
如果是个人项目,哪个工具都可以,可以根据自己的喜好来选择
公司项目 如果是公司要根据项目代码来选择,可以 通过锁文件判断 项目的包管理工具
- npm 的锁文件为
package-lock.json - yarn 的锁文件为
yarn.lock
- npm 的锁文件为
注意
包管理工具 不要混着用,切记,切记,切记