yarn快速上手
1.介绍在 Node.js 生态系统中,依赖通常安装在项目的 node_modules 文件夹中。然而,这个文件的结构和实际依赖树可能有所区别,因为重复的依赖可以合并到一起。npm 客户端把依赖安装到 node_modules 目录的过程具有不确定性。这意味着当依赖的安装顺序不同时,node_modules 目录的结构可能会发生变化。这种差异可能会导致类似 “我的电脑上可以运行,别人的电脑上不行”
1.介绍
在 Node.js
生态系统中,依赖通常安装在项目的 node_modules
文件夹中。然而,这个文件的结构和实际依赖树可能有所区别,因为重复的依赖可以合并到一起。npm
客户端把依赖安装到 node_modules 目录的过程具有不确定性。这意味着当依赖的安装顺序不同时,node_modules 目录的结构可能会发生变化。这种差异可能会导致类似 “我的电脑上可以运行,别人的电脑上不行” (即:完整可运行的项目上传到 git 上,别人 Pull 下来以后,npm install
会报错) 的情况,并且通常需要花费大量时间来解决依赖问题。
Yarn 一开始的主要目标是解决npm
中由于语义版本控制而导致的安装不确定性问题。
虽然可以用
npm shrinkwrap
来实现可预测的依赖关系树,但它并不是默认选项,而是取决于所有的开发人员指导并启用这个选项;且npm 5+ 以后的版本加入了package-lock.json
可以用来锁版本,版本更清楚,但是不向后兼容。(npm-shrinkwrap.json 向后兼容 npm 2-4)
例如,比如在一个空项目里执行以下命令:
npm init -y
npm install globule@0.1.0 -S
npm install babel-generator@6.19.0 -S
npm install babel-helper-define-map@6.18.0 -S
这里安装了 3 个包都依赖于 lodash
,不过 globule
依赖 lodash@1.0.3
,另外两个依赖 lodash@4.x
。现在目录依赖结构如下:
假设我们在项目里使用 lodash
,但是忘记重新安装 lodash
:
var lodash = require('lodash')
console.log(lodash.VERSION) // v1.0.3
另一个同事获取项目代码,执行 npm install
,这时的目录依赖结构里面,第一层依赖的 lodash
变成了 4.x
版本,这样就造成了依赖版本不一致的问题。而 yarn
则会保证无论怎样引入的顺序,目录依赖结构都是一致的,确保不会发生这样的 BUG
。
所以 Yarn
就是一个类似于 npm
的包管理工具,它是由 facebook 推出并开源。但它与 npm
相比,yarn
有着众多的优势,主要的优势在于:速度快、离线模式、版本控制。
- npm 会等一个包完全安装完才跳到下一个包,但 yarn 会并行执行包,因此速度会快很多,而且还能并行化操作以最大化资源利用率,安装速度之快前所未有;
- Yarn 会缓存它下载的每个包,所以无需重复下载,这样做的本质还是会提高安装下载的速度,避免不必要的网络请求;
- 保证各平台依赖的一致性;
- 力求网络资源最大利用化,让资源下载完美队列执行,避免大量的无用请求,下载失败会自动重新请求,避免整个安装过程失败;
- 对于不匹配的依赖版本的包创立一个独立的包,避免创建重复的。对于多个包依赖同一个子包的情况,yarn 会尽量提取为同一个包,防止出现多处副本,浪费空间。
yarn
通过生成yarn.lock
文件实现版本固定,文件内会描述包自身的版本号,还会锁定所有它依赖的包的版本号,确保从本地开发到生产环境,所有机器上都有精确相同的依赖版本。
但是我们在使用 Yarn 时,依然要访问 npm 仓库,但 Yarn 能够更快速地安装软件包和管理依赖关系,并且可以在跨机器或者无网络的安全环境中保持代码的一致性。
2.安装及配置
可前往官网下载安装,或者更为简便的方式是通过npm直接安装:
npm install -g yarn
关于为什么使用
-g
全局安装,可以参考:https://neveryu.github.io/2017/04/10/npm/;关于npm
的安装和源配置等可以参考:Node.js在Windows下安装和配置 。
修改yarn的默认配置路径:
# 改变 yarn 全局bin位置
yarn config set prefix "D:\Develop\nodejs\bin"
# 改变 yarn 全局安装位置
yarn config set global-folder "D:\Develop\nodejs\node_global"
# 改变 yarn 全局cache位置
yarn config set cache-folder "D:\Develop\nodejs\node_cache"
# 改变 yarn 全局 link 位置
yarn config set link-folder "D:\Develop\nodejs\bin\link"
查看配置的路径:
# 查看 yarn 全局bin位置
yarn global bin
# 查看 yarn 全局安装位置
yarn global dir
# 查看 yarn 全局cache位置
yarn cache dir
使用第三方软件 yrm
快速修改、测试和切换 yarn 镜像源:
# 安装
npm install -g yrm
# 列出当前可用的所有镜像源
yrm ls
# npm ----- https://registry.npmjs.org/
# cnpm ---- http://r.cnpmjs.org/
# taobao -- https://registry.npm.taobao.org/
# nj ------ https://registry.nodejitsu.com/
# rednpm -- http://registry.mirror.cqupt.edu.cn
# skimdb -- https://skimdb.npmjs.com/registry
# yarn ---- https://registry.yarnpkg.com
# 测试访问速度
yrm test taobao
# 使用淘宝镜像源
yrm use taobao
4.常用命令和比较
# install安装是yarn的默认行为
npm install === yarn
# taco包立即被保存到 package.json 中。
npm install taco --save === yarn add taco
npm uninstall taco --save === yarn remove taco
npm install taco --save-dev === yarn add taco --dev
npm update --save === yarn upgrade
npm install taco@latest --save === yarn add taco
# 一如既往,请谨慎使用 global 标记。
npm install taco --global === yarn global add taco
npm init === yarn init
npm init --yes/-y === yarn init --yes/-y
npm link === yarn link
npm outdated === yarn outdated
npm publish === yarn publish
npm run === yarn run
npm cache clean === yarn cache clean
npm login === yarn login
npm test === yarn test
yarn 独有的命令:
# 允许你检查依赖的许可信息
yarn licenses ls
# 自动创建依赖免责声明 license
yarn licenses generate
# 检查为什么会安装 taco,详细列出依赖它的其他包
yarn why taco
# 检查为什么会安装 vuepress,详细列出依赖它的其他包
yarn why vuepress
5.特性
- 同时兼容 npm 与 bower 工作流,并支持两种软件仓库混合使用;
- 可以限制已安装模块的协议,并提供方法输出协议信息;
- 提供一套稳定的共有 JS API,用于记录构建工具的输出信息;
- 可读、最小化、美观的 CLI 输出信息。
6.Windows下运行报错
Windows下运行yarn
命令出现如下错误:
以管理员的身份
运行powershell
,执行如下命令即可:
set-ExecutionPolicy RemoteSigned
注意:重启命令行!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)