Yarn介绍

21 Apr

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

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,就再也回不去了~

评论(1)

Leave a Reply

Your email address will not be published. Required fields are marked *