新一代包管理工具yarn

wuho5596 8年前
   <p><img src="https://simg.open-open.com/show/a78b25fc3a5f8ad682ba11f73a5bdefd.png"></p>    <h3><strong>yarn</strong></h3>    <p>非死book发布的新一代包管理工具,旨在解决以往使用npm作为包管理会遇到的一些问题。从其官方介绍可以看到其重点强调的3个点:快、可靠、安全。</p>    <p>yarn拥有以下6个特性:</p>    <ul>     <li> <p>离线模式: 一次安装,永久使用,无需下载</p> </li>     <li> <p>依赖确定性:安装依赖锁定,保证一致性</p> </li>     <li> <p>更好的网络性能:下载包,优化网络请求,最大限度提高网络利用率</p> </li>     <li> <p>多注册来源处理:不管依赖包被不同的库间接关联引用多少次,安装这个包时,只会从一个注册来源去装(npm/bower), 防止出现混乱不一致。</p> </li>     <li> <p>网络弹性处理: 安装依赖时,不会因为某个单次网络请求的失败导致整个安装挂掉。当请求失败时会进行自动重试。</p> </li>     <li> <p style="text-align: center;">扁平模式: 当关联依赖中包括对某个软件包的重复引用,在实际安装时将尽量避免重复的创建 <img src="https://simg.open-open.com/show/3da9861c5d8017165f02546924d3c99a.png"></p> </li>    </ul>    <h3><strong>安装方法</strong></h3>    <ul>     <li> <p>安装方式1: Npm i -g yarn</p> </li>     <li> <p>安装方式2: window下载msi,linux 和 mac 上使用 shell 指令来安装(依赖Node)</p> </li>    </ul>    <h3><strong>使用方法</strong></h3>    <p>yarn的命令基本跟npm的大同小异,使用yarn init生成package.json文件,用yarn add 和 yarn add —dev 分别替换 npm install --save 和 npm install --dev 命令即可。</p>    <p>执行yarn / yarn install 解析package.json时,分为4个步骤:</p>    <ul>     <li> <p>依赖关系解析:yarn在解析package.json文件时,会对其每个依赖包进行遍历分析生成yarn.lock文件。该文件描述了项目中每个包以及每个包中所依赖的包的版本信息。</p> </li>     <li> <p>包下载:根据第一步中解析的结果下载特定版本的包。如果该包曾经被下载过,则跳过此次的下载操作,直接使用本地缓存,即yarn的离线模式特性。</p> </li>     <li> <p>包关联:关联拷贝下载或者缓存在全局的包到项目。</p> </li>     <li> <p style="text-align: center;">包编译:编译项目中使用到的包。 <img src="https://simg.open-open.com/show/7813bb662e2858da492cc7ce3d72aa5f.png"></p> </li>     <li> <p>yarn.lock(该文件用于锁定包版本已保障每次编译的结果一致,也可通过yarn install --no-lockfile 命令设置不生成yarn.lock文件): <img src="https://simg.open-open.com/show/3f6ff372133dc055cfded0d1a9980b6d.png"></p> </li>    </ul>    <h3><strong>yarn & npm 常用命令比较</strong></h3>    <ul>     <li>npm install === yarn / yarn install</li>     <li>npm install xxx —save === yarn add xxx</li>     <li>npm uninstall xxx —save === yarn remove xxx</li>     <li>npm install xxx —save-dev === yarn add xxx —dev</li>     <li>npm update === yarn upgrade</li>     <li>npm install xxx -g === yarn global add xxx</li>    </ul>    <p>当然,在比较选择yarn与npm时,速度也是一个很重要的衡量指标。</p>    <h3><strong>yarn & npm 速度比较</strong></h3>    <p><img src="https://simg.open-open.com/show/65e6680ace8e008733a23103568dcdcb.png"></p>    <p>使用注意</p>    <ul>     <li> <p>yarn 原仓库 包下载不 稳定 需要设置仓库为tnpm 或在 cnpm</p> <pre>  <code class="language-x86asm">yarn config set registry “https://registry.npm.taobao.org”</code></pre> </li>     <li> <p>script run 有时会存在异常问题</p> </li>    </ul>    <p>总结</p>    <ul>     <li> <p>yarn 相比 npm 最直观优势就是快</p> </li>     <li> <p>目前项目在基本可以无痛迁移使用。</p> </li>     <li> <p>yarn 目前并不是非常稳定,不少反馈script run以及下载包有问题。</p> </li>     <li> <p>lock功能具有双面性,是否锁定版本需要看具体情况而定</p> </li>    </ul>    <p> </p>    <p>来自:http://imweb.io/topic/581f6c0bf2e7e042172d618a</p>    <p> </p>