FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT.
就在前不久, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm 。咱虽然是个半桶水的咸鱼前端,不过也得跟上 Javascript 这股潮 (hong) 流 (huang) 的脚步,所以便有了下面这篇文章。大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比。也可能有些地方写得不对,如果有的话,欢(lai)迎(da)指(wo)正(a)。
Installation
首先当然是安装啦。跟 npm 这种被钦点而随 nodejs 一起被安装的包管理器不同,Yarn 需要自行手动安装。这也可以理解吧,毕竟是全新的东西。不过老实说,安装体验是不太好的……吧。
为什么怎么说呢……因为我的开发环境是 Arch Linux ,而官方文档只提供了 apt-get 系 Linux 和 yum 系 Linux 的安装方式……
既然志在取代 npm ,那么肯定有全平台的兼容方案咯,果然有适用于所有发行版的手动安装脚本,于是我就尝试这个,可是装了三次没有一次成功,各种问题……
最后发现,其实 yarn 可以直接像装模块那样用 npm 装:
npm install -g yarn
啊嘞?一个要取代 npm 的东西,居然还要用 npm 来装? excuse me ?好吧,不管怎么讲总之是这样装上了,所以我说安装体验一般般……也许可能对其他的发行版来说会好一些吧,可能对于一些大众的发行版和 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 好了:
首先当然是主角 yarn 啦。需要注意的是 yarn 安装依赖的方式不同于 npm ,你需要执行以下命令来安装依赖:
yarn add react
# same as npm install react
可以看到 yarn 安装 React 用了 13.3s ,这速度也着实令人满意。
接下来是 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
Summary
忽如一夜春风来,千树万树梨花开。有时候就是眼睛一睁一闭之间,一个新的东西就这样在你全然不知的时候悄然面世了。今天出了 yarn,明天指不定又会出现什么。庆幸的是,我们还能赶上这个新玩意的早班车。
记得近几日的一篇高端黑文(大雾),描述了在 2016 年学习 Javascript 这门语言的感受(看这里: How it feels to learn Javascript in 2016 ),确实,这门语言单单一年的发展,就足以呛死不少人。
但是必须要说 yarn 的出现确实是有进步意义的,他解决了 npm 已知的一些问题,拓展出了新的特性。既然如此,它就是值得去接触和学习的。尽管距离取代 npm 还有好长的一段时间,走好长的一段路,但是可以预见它的前途将是一片的光明。
Node.js包管理器Yarn的入门介绍与安装的更多相关文章
-
Node.js包管理器:
Node.js包管理器: 当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require ...
-
9.Node.js 包管理器npm
npm 是 Node.js 官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整 ...
-
npm --- Node.js包管理器
目录 1. 安装Node.js 2. 运行npm 3. npm介绍 3.1 安装插件 3.2 更新插件 3.3 卸载插件 3.4 查看当前目录中的插件列表 4. 使用cnpm 4.1 安装 npm( ...
-
Node.js 包管理器 NPM 讲解
包管理器又称软件包管理系统,它是在电脑中自动安装.配制.卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用.对于我们业务开发也很受益,相同的东西不必重复去造*. 每个工具或 ...
-
NET Core 静态文件及JS包管理器(npm, Bower)的使用
NET Core 静态文件及JS包管理器(npm, Bower)的使用 文章目录 在 ASP.NET Core 中添加静态文件 使用npm管理JavaScript包 使用Bower管理JavaScri ...
-
VS2013中Nuget程序包管理器控制台使用入门(三)-项目实战(原创)
VS2013中Nuget程序包管理器控制台使用入门(三)-项目实战 1.给指定项目安装Newtonsoft.Json ,Version 4.5.11 PM> Install-Package Ne ...
-
node.js 安装及配置(hello world)及 node 的包管理器(npm)
下载地址:Download | Node.js,无脑下一步安装即可: 安装时,会自动将 node 可执行文件路径添加进 Path 内,这样进入 cmd 命令行,以查看 node 的安装版本: > ...
-
NPM Node.js 包管理
1.NPM 简介 1.1 NPM Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可方便地构建快速,可扩展的网络应用程序的平台.Node.js 使用事件驱动, ...
-
VS2013中Nuget程序包管理器控制台使用入门(二)-如何使用Nuget提供的帮助(原创)
如何使用Nuget提供的帮助? 1.从get-help Nuget开始,键入“get-help NuGet”以查看所有可用的 NuGet 命令. 用法: PM> get-help Nuget 主 ...
随机推荐
-
Entity Framework EF6使用 MySql创建数据库异常解决办法
EF6使用MySQL数据库时,第一次创建数据库出现“Specified key was too long; max key length is 767 bytes”错误,解决办法请见以下连接. htt ...
-
设计模式--原型(Prototype)模式
写这些也许有人认为“为了模式而模式”.Insus.NET所想到的,每个大师成为大师之前,也许都得这样做. 走路,从小就开始学,直至现在,谁还不是为了走路而走路?一直重复着...... 很多人没有分享自 ...
-
PHPStrom 使用技巧以及基本设置教程【更新完结】
本博文由北京乐学一百在线教育科技有限公司平台开发组成员提供,在此表示感谢,截图来源于Tower,热力推荐的一款不错的办公工具. 1.SVN链接上的条件下,修改子文件,父文件夹以及祖辈文件夹变色设置: ...
-
jQuery实现公告文字左右滚动的代码。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
-
R语言-离职率分析
案例:员工流失是困扰企业的关键因素之一,在这次的分析中我将分析以下内容: 对一些重要变量进行可视化及探索分析,收入,晋升,满意度,绩效,是否加班等方面进行单变量分析 分析员工流失的因素,探索各个变量的 ...
-
shell 中的特殊变量
shell 中的特殊变量 变量名 含义 $# 参数的个数 $$ 代表所在命令的PID $0 shell或shell脚本的名字 $* 以一对双引号给出参数列表 $@ ...
-
怎样给手机安装fiddler证书
如果需要抓取手机端的HTTPS包,就要在手机上面安装fiddler证书. 1.使用手机连接WiFi做好代理: 2.代理成功后打开手机浏览器: 3.在浏览器输入:http://IP地址:端口号后搜索(如 ...
-
linux环境启动数据库
1.查看数据库监听的状态: 监听状态:lsnrctl status 出现如下列截图所示数据,说明切切换账户有问题:切换账户时要家:-: 如 su - oracle 第一步:打开Oracle监听$ ...
-
Linux&#160;下修改网卡MAC地址
Linux下修改网卡MAC地址 by:授客 QQ:1033553122 例子:修改网卡接口eth0的mac地址 #停用网卡接口,比如eth0 # ifconfig eth0 down #编辑对应的网卡 ...
-
部署python django程序
在一台新的服务器上x需要先安装python3 ,git , 等 安装python3 安装python3 之前博客写过 创建虚拟环境,我用的是venv https://docs.python.org/ ...