Yarn介绍

Yarn是facebook发布的一款取代npm的包管理工具。鉴于facebook在前端界的影响力,yarn一面世就很受瞩目,将学习使用后的心得整理成本篇。

yarn的背景知识可以看CSS魔法分享的这篇文章。看下来相比npm,主要的优势在于:速度快,离线模式,版本控制。

先说速度快。npm会等一个包完全安装完才跳到下一个包,但yarn会并行执行包,因此速度会快很多。网上有不少比较npm和yarn安装同样多依赖的执行速度,yarn在速度方面优势明显。实际项目中体验一下真是飞一样的速度,谁有试过谁知道~

关于离线模式,本人能力有限,对CI系统的了解比较浅薄,因此对facebook介绍的无法离线使用npm的痛点感受不深。离线的原理比较简单,安装过的包会被保存进缓存目录,以后安装就直接从缓存中复制过来。

最后说说版本控制。npm用下来比较强的一个痛点就是:当包 的依赖层次比较深时,版本控制不够精确。会出现相同package.json,但不同人的电脑上安装出不同版本的依赖包,出现类似 “我电脑上是好的,没问题呀”的bug很难查找。你可以使用npm-shrinkwrap来实现版本固化,版本信息会写入npm-shrinkwrap.json文件中,但它毕竟不是npm的标准配置。

而yarn天生就能实现版本固化。会生成一个类似npm-shrinkwrap.json的yarn.lock文件,文件内会描述包自身的版本号,还会锁定所有它依赖的包的版本号:

yarn.lock存储这你的每个包的确切依赖版本,能确保从本地开发到生产环境,所有机器上都有精确相同的依赖版本。

yarn的常用命令

安装yarn:

npm install -g yarn

成功安装后,可以查看版本号:

yarn --version

开始项目命令:

yarn init   //同npm init,执行输入信息后,会生成package.json文件

yarn的配置项:

yarn config list                                           //显示所有配置项
yarn config get <key>                                //显示某配置项
yarn config delete <key>                            //删除某配置项
yarn config set <key> <value> [-g|--global] //设置配置项

安装包:

yarn install                      //安装package.json里所有包,并将包及它的所有依赖项保存进yarn.lock
yarn install --flat           //安装一个包的单一版本
yarn install --force           //强制重新下载所有包
yarn install --production   //只安装dependencies里的包
yarn install --no-lockfile  //不读取或生成yarn.lock
yarn install --pure-lockfile //不生成yarn.lock

添加包(会更新package.json和yarn.lock):

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

//不指定依赖类型默认安装到dependencies里,你也可以指定依赖类型:
yarn add --dev/-D        //加到 devDependencies
yarn add --peer/-P       //加到 peerDependencies
yarn add --optional/-O  //加到 optionalDependencies

//默认安装包的主要版本里的最新版本,下面两个命令可以指定版本:
yarn add --exact/-E //安装包的精确版本。例如yarn add foo@1.2.3会接受1.9.1版,但是yarn add foo@1.2.3 --exact只会接受1.2.3版
yarn add --tilde/-T      //安装包的次要版本里的最新版。例如yarn add foo@1.2.3 --tilde会接受1.2.9,但不接受1.3.0

补充说明1:上述添加命令默认会从npm registry里去添加包,但yarn也支持你从其他路径去添加包,add命令可以添加具体路径,详见官网

补充说明2:yarn推荐你将包安装在项目中,但同npm一样,你也可以全局安装包,用yarn global add就行了。yarn global可用在add,upgrade,remove命令前。但注意global必须紧接在yarn后面,例如yarn add global是非法的,yarn会尝试去安装一个名为“global”的包

升级 / 移除单个包(均会更新package.json和yarn.lock):

yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]

yarn remove [package]

yarn会将安装的包缓存起来:

yarn cache ls         //列出所有本地缓存了的包
yarn cache dir      //列出本地缓存的位置
yarn cache clean    //清除本地缓存

检查包:

yarn check                  //检查package.json里的依赖版本和yarn.lock里是否一致
yarn check --integrity  //检查package.json里的依赖版本的hash值和yarn.lock里是否一致,有助于验证包依赖没有更改

下面这些命令和对应的npm命令差不多,有npm基础应该不难理解:

yarn run
yarn login/logout
yarn owner add  
yarn owner rm  
yarn publish
yarn version

因为yarn和npm一样使用package.json,因此如果你的项目中正在使用npm可以无缝对接yarn。如果用下来实在不喜欢yarn,只要删除项目中的yarn.lock文件,继续使用npm命令就行了。但我相信你用过yarn,就再也回不去了~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 一、为什么需要yarn 作为一个前端,说到包管理首先想到的可能是node里的npm。至今为止,它可以访问在npm注...
    gavinDu阅读 3,356评论 0 0
  • 这篇文章已经被 Adrian Sandu, Marcello La Rocca, Matt Burnett, Nu...
    lucy_阅读 8,873评论 4 16
  • Yarn 初始化一个项目 yarn init 相当 npm init yarn add添加一个包 相当 ...
    FConfidence阅读 28,707评论 5 19
  • yarn facebook发布的新一代包管理工具,旨在解决以往使用npm作为包管理会遇到的一些问题。从其官方介绍可...
    琢磨先生lf阅读 6,244评论 4 1
  • YARN产生背景 MRv1的局限 YARN是在MRv1基础上演化而来的,它克服了MRv1中的各种局限性。在正式介绍...
    Jeffbond阅读 2,068评论 0 3