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