为什么使用yarn
yarn刚出来的时候并不能理解它存在的意义,所以之前一直都未曾使用。但是最近经常遇到两个让人很郁闷的问题。
- 另一个人clone项目后
npm install,发现运行不起来,去node_modules里面查看依赖库的版本号和我本地的不同。然后只好把package.json中依赖库的版本号从^2.3.0变成了2.3.0,指定版本。 - 还有上面搞不定的情况,例如: 我在开发的项目中依赖了库
gulp:3.9.1, 但是 gulp又依赖了minimist:^1.1.0,如果minimist这个库升级变成了1.1.1,那么最近安装的人这个库就变成了minimist:1.1.1。如果minimist:1.1.1并没有做到兼容,但是版本号却按这种兼容的方式写了,很有可能项目就启不起来了。 npm5之前的版本的npm install的速度真的太慢了,特别是react-native的项目。
机制
yarn正是解决了上面的痛点, 准确与速度。
初次执行生成yarn.lock文件
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
abab@^1.0.3:
version "1.0.3"
resolved "http://registry.npm.taobao.org/abab/download/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
abbrev@1:
version "1.1.0"
resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
abbrev@1.0.x:
version "1.0.9"
resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
accepts@~1.3.3:
version "1.3.4"
resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
dependencies:
mime-types "~2.1.16"
negotiator "0.6.1"
acorn-globals@^3.1.0:
version "3.1.0"
resolved "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
dependencies:
acorn "^4.0.4"
acorn-jsx@^3.0.0:
version "3.0.1"
resolved "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
dependencies:
acorn "^3.0.4"
acorn@^3.0.0, acorn@^3.0.4:
version "3.3.0"
resolved "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
acorn@^4.0.4:
version "4.0.13"
resolved "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
acorn@^5.1.1:
version "5.1.2"
resolved "http://registry.npm.taobao.org/acorn/download/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
可以看到每个url最后都有一个hashcode,初次执行的时候都会给每个包分配好这个hashcode。
在已有yarn.lock文件的项目中执行安装依赖包
安装过程中会省去从node_modules中分析出依赖树的过程,因为已经有了依赖树yarn.lock。所以安装过程会快很多。并且,由于hashcode的存在,能够保证每一个人安装的库都是一致的。
怎么使用
安装(npm的方式)
npm install yarn -g
初始化yarn.lock
yarn
安装依赖库
yarn install 等同于 npm install
yarn add package-name 等同于 npm install package-name
查看设置
yarn config list
设置淘宝镜像/内部库
yarn config set registry http://registry.cnpm.dev.private.com