Node.js包管理器Yarn的入门介绍与安装


Posted in Javascript onOctober 17, 2016

前言

这两天大家有没有都被Yarn悄悄刷了屏,最近Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm 。为了跟上 Javascript 这股潮 流的脚步,大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比。也可能有些地方写得不对,如果有的话,欢迎指正。

一、安装

首先当然是安装啦。跟 npm 这种被钦点而随 nodejs 一起被安装的包管理器不同, Yarn 需要自行手动安装。这也可以理解吧,毕竟是全新的东西。不过老实说,安装体验是不太好的……吧。

为什么怎么说呢……因为我的开发环境是 Arch Linux ,而官方文档只提供了 apt-get 系 Linux 和 yum 系 Linux 的安装方式……

既然志在取代 npm ,那么肯定有全平台的兼容方案咯,果然有适用于所有发行版的手动安装脚本,于是我就尝试这个,可是装了三次没有一次成功,各种问题……

最后发现,其实 yarn 可以直接像装模块那样用 npm 装:

npm install -g yarn

一个要取代 npm 的东西,居然还要用 npm 来装? 好吧,不管怎么讲总之是这样装上了,所以我说安装体验一般般……也许可能对其他的发行版来说会好一些吧,可能对于一些大众的发行版和 macOS 来说,安装就是一条命令打进终端的事情。

虽然截止到我写这篇文章的时候,已经有了 Arch Linux 上的安装方式,不过是通过 yaourt(AUR) 的方式,不过我并不觉得对于新手来说手动装一下 yaourt 再装 yarn 比直接装 nodejs 然后 npm install 简单。也许在现阶段,相比什么 Debian/Ubuntu/CentOS 来说 Arch 还是个小众的发行版吧……

二、Dependencies Management

安装部分就这样告一段落。既然作为一个包管理,就要做好自己的职责。接下来就想要试试这个新包管理是否真的有它所宣传的那样神奇。接下来我在同样的环境下,将 yarn 和 npm 以及 cnpm 做对比。由于墙内的特殊环境,已将 npm 的 registry 更换为 https://registry.npm.taobao.org 。

FASTER

在对比之前,我觉得这个对比对 yarn 来说有些不公平,因为 npm 已经设置了国内的镜像,而截止此文章发布的时候 yarn 并没有国内镜像,所以并没有对 yarn 进行特殊的设置。我有些担心这样会不会对测试的结果造成误差。

Yarn 既然是 Facebook 家的东西,那我们就首先试一下安装他家的 React 好了:

Node.js包管理器Yarn的入门介绍与安装

首先当然是主角 yarn 啦。需要注意的是 yarn 安装依赖的方式不同于 npm ,你需要执行以下命令来安装依赖:

yarn add react
# same as npm install react

可以看到 yarn 安装 React 用了 13.3s ,这速度也着实令人满意。

Node.js包管理器Yarn的入门介绍与安装

接下来是 npm 。因为 npm 并不显示命令时间,所以我掐了一下秒表,大概 45s 的样子,是 yarn 的好几倍多。好像比起 npm 来说, yarn 的速度确实快了一些呢,而且 npm 用的还是国内的源。

不过 cnpm 的速度就更快了,只用了 4s 便完成了整个安装过程。但是毕竟 cnpm 是 npm 的衍生产物,处于情理之中。既然这东西可以改善 npm 的速度,谁知道以后会不会有 cyarn 呢?但是通过这个测试我们可以看出, yarn 的速度相比原生 npm 着实是一个质的飞跃,FASTER 并不是浪得虚名。

接下来我又尝试了安装其他的包,多次对比了一下, 平均下来 yarn 会比 npm 快上 3?6 倍(这是安装体积小一些的包的情况)。

RELIABLE/SECURE

至于这个包管理是否 reliable/secure ,这个我暂时没想到怎么测试。我只知道在我用的时候,偶尔有几率会报一些莫名其妙的错误,但是反复执行两遍命令,就又正常工作了。毕竟 yarn 是新出的东西嘛,可以理解。不过就在这一天之内,yarn 的 GitHub 项目主页已经赢得了 9K star,issues 和 pull request 也有了上千个,可见其火热的程度,所以对于它的前景,我还是很看好的。

Offline mode

Yarn 的一个亮点就是可以离线安装依赖,当然,前提是曾经安装过这个依赖。 Yarn 会缓存安装过的包,下次安装的时候如果指定了 -offline 参数, Yarn 就会直接从缓存中取出这个包,这样将大大缩短安装依赖的时间。

遗憾的是,尽管官方文档我看了一遍又一遍,这个功能还是无法正常在我的环境上工作。我会找一下原因,这一段稍后补充。

但是这个 feature 真的是让人眼前一亮,可以说解决了 npm 的一个短板,很致命的短板。有了这样的功能之后,以后在没有网络的环境下也能够安装已有的依赖的。而且省去了下载的时间,大大提高了效率。想象一下以后执行 react-native init 的时候不用漫长等待 15 分钟了,是不是很开心(当然,什么时候 Facebook 把 react-native init 的安装依赖过程换成自家的包管理安装还是未知数喔)。

yarn.lock 文件

Yarn 通过一个 yarn.lock 文件,来使得你的程序得以在不同的机器上获得一致的体验。虽然这个解释很牵强,好歹我没有机翻给大家看,已经很良心了(雾)。感觉这好像是个很高端的东西,其实主要是对 package.json 的一个补充。

有兴趣的话,可以看这里的详细介绍(需要英文好一些哟):

Yarn

Fast, reliable, and secure dependency management. yarnpkg.com

总结

有时候就是眼睛一睁一闭之间,一个新的东西就这样在你全然不知的时候悄然面世了。今天出了 yarn,明天指不定又会出现什么。庆幸的是,我们还能赶上这个新玩意的早班车。

但是必须要说 yarn 的出现确实是有进步意义的,他解决了 npm 已知的一些问题,拓展出了新的特性。既然如此,它就是值得去接触和学习的。尽管距离取代 npm 还有好长的一段时间,走好长的一段路,但是可以预见它的前途将是一片的光明。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作带来一定的帮助。

Javascript 相关文章推荐
jquery 指南/入门基础
Nov 30 Javascript
javascript iframe中打开文件,并检测iframe存在否
Dec 28 Javascript
Js点击弹出下拉菜单效果实例
Aug 12 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
Javascript 5种方法实现过滤删除前后所有空格
Jun 22 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
Angular企业级开发——MVC之控制器详解
Feb 20 Javascript
JavaScript调用模式与this关键字绑定的关系
Apr 21 Javascript
Angular如何在应用初始化时运行代码详解
Jun 11 Javascript
JavaScript工具库之Lodash详解
Jun 15 Javascript
浅谈VUE中演示v-for为什么要加key
Jan 16 Javascript
深入理解JS实现快速排序和去重
Oct 17 #Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 #Javascript
Angular 2应用的8个主要构造块有哪些
Oct 17 #Javascript
jQuery表单验证简单示例
Oct 17 #Javascript
jQuery右下角悬浮广告实例
Oct 17 #Javascript
WEB前端实现裁剪上传图片功能
Oct 17 #Javascript
Javascript获取background属性中url的值
Oct 17 #Javascript
You might like
坏狼php学习 计数器实例代码
2008/06/15 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
PHP强制转化的形式整理
2020/05/22 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
HTML DOM的nodeType值介绍
2011/03/31 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
python3转换code128条形码的方法
2019/04/17 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
pandas DataFrame运算的实现
2020/06/14 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
学生社团文化节开幕式主持词
2014/03/28 职场文书
党员示范岗材料
2014/12/19 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
Python Pandas 删除列操作
2022/03/16 Python