专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
OSC开源社区  ·  如何编写既美观又规范的Java代码? ·  3 天前  
程序猿  ·  “再见了 ... ·  3 天前  
51好读  ›  专栏  ›  OSC开源社区

JavaScript 包管理器 Yarn 可以为你做的五件事

OSC开源社区  · 公众号  · 程序员  · 2017-01-25 08:34

正文


摘要:在 JavaScript 的领域,有好几种包管理器:npm、bower、component 和 volo 等。在写这篇文章的时候,最流行的 JavaScript 包管理器是 npm。通过 npm 客户端可以访问 npm 资料库中成千上万的代码。就在前不久,Fackbook 发布了一个新的 JavaScript 包管理器,Yarn,声称它比 npm 更快、更可靠,而且更安全。在这篇文章中,你能了解到可以使用 Yarn 做的 5 件事。

Yarn 是 Facebook 创造的 JavaScript 包管理器。他向在应用中使用 JavaScript 的开发者提供了快速、高可靠性安全依赖的包管理。


离线工作


Yarn 提供了离线工作模型。如果你以前安装过某个包,那你就可以在没有互联网连接的情况下再次安装。下面是一个典型的例子:

我在连接到互联网的时候用 Yarn 安装了两个包:

用 yarn init 创建了 package.json

用 yarn 安装 express 和 jsonwebtoken

安装完成

安装完成之后我删除了 orijin 目录下的 node_modules,并且断开互联网。然后像下面这样运行 Yarn:

Yarn 在离线状态下安装包

看!所有包在2秒之内就就完成了安装。看来 Yarn 会缓存下载的每个包,之后就不需要再次下载了。Yarn 会通过并行最大化利用资源,所以安装起来比以往[译者注:指以往用 npm 的方式]更快。


从多个资料库安装


Yarn 可以从多个资料库安装 JavaScript 包,这些资料库包括 npm、bower、Git 库甚至本地文件系统。

默认情况下,它会在 npm 资料库中扫描你需要的包:

你下面这样可以从远程安装一个 gzip 压缩包:

下面会从本地文件系统安装包:

从本地文件系统安装包对持续发行 JavaScript 包的开发者特别有帮助。你可以在把包发行到资料库之前通过这个功能测试你的包。

从远程 Git 库安装包:

Yarn 从 Github 安装包

Yarn 还会自动检查 Git 库是否是作为 Bower 资料库使用,如果是则把它当作 Bower 资料库使用。


快速获取包


使用过 npm 的人都有这样的体验,先运行 npm 进行安装,然后就可以去看场电影,回来再检查是否安装完成。好吧,也许说这么长的时间有点夸张,但是 npm 确实会花很长的时间用于遍历依赖树,并摘取依赖包。Yarn 已经实实在在地把安装等待时间从分钟级别降低到秒级。

Yarn 高效地将请求组成队列,避免大量使用网络资源。它从请求资料库开始,然后递归检查每荐依赖。然后它会在公共的缓存目录查找所需要所包是否已经下载过。如果没有,Yarn 会将压缩包下载到公共缓存,使之可以离线使用,避免重新下载。

安装过程中,Yarn 会进行并行操作,这使得安装过程快得多。我分别使用 npm 和 yarn 安装了 3 个包,jsonwebtoken、express 和 lodash。当 Yarn 完成安装的时候,npm 仍在继续。


自动锁定包版本


npm 有个叫作 shrinkwrap(拆封) 的特性,其目的是在生产环境下锁定包的依赖。shrinkwrap 带来的挑战是每个开发者都必须手动运行 npm shrinkwrap 来生成 npm-shrinkwap.json 文件。但开发者也是人,所以有时候也会忘记做这事!

Yarn 使用了不同的规则,它会在安装过程中自动产生 yarn.lock 文件。这个文件与 PHP 开发者所熟知的 composer.lock 文件类似。yarn.lock 文件会锁定安装的包及其依赖包的准确版本。这个文件可以确保团队中每一个成员都安装了版本完全相同的包,这样一来,开发过程就可以在无差异的情况下多次进行。


在不同的设备以相同的方式安装依赖


npm 客户端安装依赖项的方式可能造成开发者 A 的 node_modules 目录结构与开发 B 的 node_modules 目录结构不同。它使用不具确定性的方法来安装依赖项,因此有时候会造成难以重现的错误。

Yarn 通过锁定文件和安装算法确保在不同的的设备中,以及在生产环境中,安装的依赖都是相同和文件和相同的目录结构。

注意:还有一件事,我知道我已经说完 5 件事了,但是我不能抑制住自己,我想告诉你们 Yarn 给我多么好的感觉。企业环境需要列出依赖项的许可类型。Yarn 可以通过在项目根目录运行 yarn licenses ls 来列出指定依赖项的许可类型,就像下面的示例:

顺便说下:Yarn 中使用 Auth0

[译者注:原文来自 auth0.com,所以你懂的…]

Auth0 对用户的每一次登录发放 JSON Web 令牌。这就是说,你只需要少量代码就能实现一个固定的身份基础,包括单点登录、用户管理、支持社区身份[译者注:即常说的第三方登录](Facebook、Github、Twitter 等)、企业身份(活动目录、LDAP、SAML 等),以及你自己的用户数据库。

我们可以使用锁部件在 JavaScript 中很容易地实现授权管理。你可以用 Yarn 安装 Auth0 的锁部件:

安装这个部件只需要几秒就能完成,yarn.lock 文件可以锁定准确的版本。如果你没有 Auth0 账号,赶快去注册一个。访问 Auth0 的管理面板,从菜单中选择应用程序,然后选择一个应用,这个应用会连接你使用的 JavaScript 框架。现在看看快速开始文档,选择你要建立的应用类型,并按高亮的步骤进行。

小结


Yarn 一开始就为 JavaScript 获取包的方式带来了重大改进,允许从公共资料库获取包,也允许从本地环境获取,更重要的是为它还充分考虑了速度和安全性。

文中涉及大量代码,可点击“阅读原文”查看详情。




推荐阅读

盘点各类编程语言中最火的开源项目,跟你想的一样吗?

免费个人博客搭建教程详解:Hexo+OSChina

程序员排行榜:测测你的码力值,2016年击败了全国多少工程师?

羽毛也疯狂,盘点 Apache 最新毕业的11个顶级项目

2016 年度开源中国新增开源软件排行榜 TOP 100

点击“阅读原文”查看更多精彩内容