js包管理工具-- yarn
yarn对比npm的优点
根据官方文档yarn具有6大优点
离线模式
yarn会有一个缓存目录,会缓存以前安装过的软件包,再次安装时就不必从网络下载了,大大加速安装速度。
这一点很重要,npm 饱受诟病的一点就是,每次安装依赖,都需要从网络下载一大堆东西,而且是全部重新下载,工程多的时候比较烦人。
我司部署node项目,是需要在发布机上install所有的依赖而且发布机的网络环境不是很好(不给搭梯子),导致安装慢不说还经常失败(部分包需要联网编译)。更换yarn后只需将yarn的cache目录缓存起来,每次install嗷嗷的快,麻麻再也不用担心发布失败了。
依赖关系确定性
在每一台机器上针对同一个工程安装依赖时,生成的依赖关系顺序和版本是一致的。
之前 npm 在这里有一个处理得不好的地方 。举例来说,我写的工程依赖 A, B, C 三个库,我在编写 package.json 的时候,给 A, B, C 都指定了版本号。但是 A 库可能又依赖 D, E, F 库,D 库又依赖 G, H 库。这么多关联依赖关系中,很可能某个库在指定依赖时,没有指定版本号。
于是,这就导致了一个问题。如果我在另一台机器上对同样的工程安装依赖,或者把这台机器工程下的 node_modules 目录删除来重新安装依赖。由于关联依赖中,没有指定版本号的库,发生了版本更新,就会导致再次安装的依赖,其中具体某些软件包的版本是不一致的。在这种情况下,你会发现原来能够正常运行的程序,忽然变得不能工作或一堆 BUG.
npm对包引入顺序也十分的敏感,比如在一个空项目里执行以下命令
1
2
3
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
1
2
|
var lodash = require('lodash');
console.log(lodash.VERSION); // v1.0.3
|
另一个同事获取项目代码,执行npm install
,这时的目录依赖结构为
可以看到第一层依赖的lodash变成了4.x版本,这样就造成了依赖版本不一致的问题。而yarn则会保证无论怎样引入的顺序,目录依赖结构都是一致的,确保不会发生这样的BUG。
网络性能优化
下载软件时会优化请求顺序,避免请求瀑布
发生
网络回弹
yarn在某个安装包请求失败时不会导致安装失败,它会自动去尝试重新安装。而npm则会毫不犹豫的失败,导致得再来一次,耗费时间
多注册来源
所有的依赖包,不管他被不同的库间接关联引用多少次,安装这个包时,只会从一个注册来源去装,要么是 npm 要么是 bower, 防止出现混乱不一致。
扁平模式
对于多个包依赖同一个子包的情况,yarn会尽量提取为同一个包,防止出现多处副本,浪费空间。比如1.2中,yarn会为babel-generator和babel-helper-define-map 创建同一个lodash子依赖,这样就节约一份的空间。
更多的emojis
表情包大战o(╯□╰)o
正确的安装姿势
注意yarn依赖node运行环境,官网提供了不同环境下的N种安装方法,点我查看。其中最重要的也是最通用的当然是npm install yarn -g
,也不知道官网搞那么多幺蛾子的安装方式干嘛又是brew又是yum,还折腾半天。
yarn常用命令介绍
创建项目
命令yarn init
,详细介绍
跟npm一样,会出现一个交互式的窗口,问一些package相关的问题
1
2
3
4
5
6
7
8
9
|
question name (testdir): my-awesome-package
question version (1.0.0):
question description: The best package you will ever find.
question entry point (index.js):
question git repository: https://github.com/yarnpkg/example-yarn-package
question author: Yarn Contributor
question license (MIT):
success Saved package.json
✨ Done in 87.70s.
|
当然可以加参数 --yes/-y
来自动回答所有的问题(yes),便捷的生成一个package.json
管理依赖
注意,以下的命令都会自动更新你的package.json和yarn.lock文件
添加依赖
命令yarn add [package]@[version/tag]
,详细介绍
这会自动把包添加到package.json里的dependencies,也同时会更新yarn.lock
1
2
3
4
5
6
|
{
"name": "my-package",
"dependencies": {
+ "package-1": "^1.0.0"
}
}
|
添加到不同的dependencies需要加如下参数
yarn add --dev/-D
添加到devDependenciesyarn add --peer/-P
添加到peerDependenciesyarn add --optional/-O
添加到optionalDependencies
更新依赖
命令yarn upgrade [package]@[version/tag]
,详细介绍
更新某个依赖的版本,并自动更新package.json和yarn.lock文件
1
2
3
4
5
6
7
|
{
"name": "my-package",
"dependencies": {
- "package-1": "^1.0.0"
+ "package-1": "^2.0.0"
}
}
|
删除依赖
命令yarn remove [package]
删除某个依赖,并自动更新package.json和yarn.lock文件
安装依赖
命令 yarn install
,详细介绍
会从package.json里提取所有的依赖并安装,然后生成yarn.lock锁定所有的依赖版本,别人执行yarn install
时会根据yarn.lock安装依赖,保证不同的电脑安装的依赖目录结构完全一致。
可选参数
yarn install --flat
有且仅有一个依赖的版本被允许,多依赖会出现一个交互式窗口,让使用者选择某一个版本安装yarn install --force
强制重新下载所有的依赖包yarn install --production
只下载dependencies下的依赖
全局命令
在yarn命令前加一个global修饰,可以将命令变为全局的,支持的命令有 add,bin,ls,remove,upgrade
例如npm install gulp -g
,可以用yarn global add gulp
来替代
个人使用心得
- 更换安装源,使用阿里提供的npm register加速,
yarn config set registry 'https://registry.npm.taobao.org'
,当然如果npm已经配置过,yarn就无需再配置了。 - yarn还有许多小问题,不过官方也在努力修复中,建议时不时使用
yarn self-update
来更新版本
js包管理工具-- yarn的更多相关文章
- Node.js包管理器Yarn的入门介绍与安装
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...
- 前端包管理工具 yarn
yarn 是一个 与 npm 类似的 前端包管理工具 安装 windows 要去官网下载 (一定要去官网下载 .mis 文件进行安装) 用npm 或者 cnpm 也能安装 但是这种安装 有缺 ...
- 包管理工具-yarn
今天知道了一个新的包管理工具叫yarn,总结如下: 如果你知道npm的使用过程,那么yarn你就觉着相见恨晚呐...... npm存在的问题: >安装的时候无法保证速度的一致性 >安全问题 ...
- js 包管理工具
环境 Windows10 + node 12.x + Webstorm 2019.1.3 工具 npm cnpm yarn npm/cnpm Webstorm 中第一次安装包一定几率卡死,很烦 不使用 ...
- 一个比NPM更快更安全可靠的JavaScript包管理工具——Yarn
yarn安装: npm intall -g yarn 查看安装是否成功: yarn -v yarn常用的命令以及和npm的对照如下: 更详细的请查看官方文档
- npm 和 yarn 前端包管理工具
前言 前端开发逐渐工程化,npm作为我们的依赖管理工具起到十分重要的作用,本文就来总结一下 npm 和 yarn 相关知识点. 正文 1.什么是npm (1)node的包管理器(node packag ...
- 主流包管理工具npm、yarn、cnpm、pnpm之间的区别与联系——原理篇
接触 node 之后,一直使用npm包管理工具, cnpm 一开始会用一些,但是并没有觉得比 npm 快得多,使用 cnpm 的时候还经常安装不成功,只能再用 npm 安装一遍,渐渐的就弃用了 cnp ...
- Node.js权威指南 (4) - 模块与npm包管理工具
4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...
- node的包管理工具:yarn和npm
arn是Facebook发布的一款依赖管理工具,它比npm更快.更高效. NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题. 一.yarn官方网站: 英文官网:ht ...
随机推荐
- jenkins+maven+junit构建自动化测试,整合junit xml生成直观的测试报告[留存]
在自动化测试过程中,测试报告最能直观的体现测试的价值,之前一直使用maven+junit来构建我的自动化测试,但这样有几个缺点,一是,不能定时构建自动化任务(也许是我没有找到maven有没有提供这样的 ...
- Jenkins+Ant+Jmeter搭建持续集成的接口测试平台(转)
一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...
- Tomcat默认界面可导致版本信息泄露+管理后台爆破
由于配置的Tomcat时,管理页面未进行删除或者权限角色配置,攻击者可以通过暴力猜解进入到管理后台,从而上传获取shell. Tomcat的默认工具manager配置,在很多的生产环境中由于基本用不到 ...
- 如何搜索IP的地理位置
如何搜索IP的地理位置 http://www.ip138.com/ 打开上边这个网页以后,会显示自身的IP及地理位置,,,,也可以搜索别人的IP和地理位置,手机号等:截图如下:
- strace命令解析
strace常用于跟踪和分析进程执行时中系统调用和耗时以及占用cpu的比例,常用的格式如下: 1.sudo /usr/bin/strace -Ttt -p pid 2>pid.log 跟进pid ...
- inotify-tools命令使用讲解
inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件. inotify-tools是用 ...
- JAVA操作mysql
所需jar包:mysql-connector-java.jar 代码: import java.sql.*; import java.util.ArrayList; import java.util. ...
- Ubuntu下看不见pthread_create(安装pthread线程库)
使用下面的命令就可以了! sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev 然后在用man -k pthre ...
- POJ 2676 Sudoku (DFS)
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11694 Accepted: 5812 Special ...
- magento 为用户注册增加一个字段(转)
步骤 I. 加一个occupation/title字段到用户注册页,差不多在register.html的54行,在email下方加一个Occupation显示代码 代码: <li>< ...