Yarn 对你的代码来说是一个包管理器, 你可以通过它使用全世界开发者的代码, 或者分享自己的代码。Yarn 做这些快捷、安全、可靠,所以你不用担心什么。
通过Yarn你可以使用其他开发者针对不同问题的解决方案,使自己的开发过程更简单。 使用过程中遇到问题,你可以将其上报或者贡献解决方案。一旦问题被修复, Yarn会更新保持同步。
代码通过 包(package) (或者称为 模块(module)) 的方式来共享。 一个包里包含所有需要共享的代码,以及描述包信息的文件,称为 package.json
。
与npm的区别
Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。它的目的是解决这些团队使用 npm 面临的少数问题,即:
- 安装的时候无法保证速度/一致性
- 安全问题,因为 npm 安装时允许运行代码
npm 和 Yarn 都使用 package.json
来跟踪项目的依赖,版本号并非一直准确,因为你可以定义版本号范围,这样你可以选择一个主版本和次要版本的包,但让 npm 安装最新的补丁也许可以修改一些 bug。
理想状态下使用语义化版本发布补丁不会包含大的变化,但不幸的是这必非真理。npm 的这种策略可能导致两台拥有相同 package.json
文件的机子安装了不同版本的包,这可能导致一些错误。
为了避免包版本的错误匹配,一个确定的安装版本被固定在一个锁文件中。每次模块被添加时,Yarn 就会创建(或更新)yarn.lock
文件,这样你就可以保证其它机子也安装相同版本的包,同时包含了 package.json
中定义的一系列允许的版本。
在 npm 中同样可以使用 npm shrinkwrap
命令来生成一个锁文件,这样在使用 npm install
时会在读取 package.json
前先读取这个文件,就像 Yarn 会先读取yarn.lock
一样。这里的区别是 Yarn 总会自动更新 yarn.lock
,而 npm 需要你重新操作。
除了一些功能差异,Yarn 命令也存在一些区别。例如移除或修改了一些 npm 命令以及添加了几个有趣的命令。
yarn global
不像 npm 添加 -g
或 --global
可以进行全局安装,Yarn 使用的是 global
前缀。不过与 npm 类似,项目依赖不推荐全局安装。
global
前缀只能用于 yarn add
, yarn bin
, yarn ls
和 yarn remove
,除yarn add
外,这些命令都和 npm 等效。
yarn install
npm install
命令会根据 package.json
安装依赖以及允许你添加新的模块;yarn install
仅会按 yarn.lock
或 package.json
里面的依赖顺序来安装模块。
yarn add [–dev]
与 npm install
类似,yarn add
允许你添加与安装模块,就像命令的名称一样,添加依赖意味着也会算定将依赖写入 package.json
,类似 npm 的 --save
参数;Yarn 的 --dev
参数则是添加开发依赖,类似 npm 的 --save-dev
参数。
yarn licenses [ls|generate-disclaimer]
npm 没有类似命令来方便编写自己的包。yarn licenses ls
列出所有已安装包的许可协议。yarn licenses generate-disclaimer
生成包含已安装包许可协议的免责声明。某些协议要求使用者必须在项目中包含该协议,这时候该命令将变得非常好用。
yarn why
该命令会查找依赖关系并找出为什么会将某些包安装在你的项目中。也许你明确为什么添加,也许它只是你安装包中的一个依赖,yarn why
可以帮你弄找出。
yarn upgrade
该命令会根据符合 package.json
设定的规则而不是 yarn.lock
定义的确切版本来将包更新到最新版本。如果想用 npm 来实现相同目的,可以这样执行:
Shell
1 | rm -rf node_modules |
---|---|
2 | npm install |
不要将该命令与 npm update
混淆,它指的是更新到自己的最新版。
yarn generate-lock-entry
yarn generate-lock-entry
会基于 package.json
设置的依赖生成 yarn.lock
文件,该命令与 npm shrinkwrap
类似,但应该小心使用,因为通过 yarn add
和 yarn upgrade
命令添加或更新依赖时会自动更新生成该锁文件。
在这介绍两种安装方式:
安装
1. npm工具安装
npm install yarn -g
2. 官网安装
使用
初始化一个新项目
相当于npm的 npm init
yarn init
添加依赖包
相当于npm的 npm install [packageName] --save
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
将依赖项添加到不同依赖项类别中
分别添加到 devDependencies
、peerDependencies
和 optionalDependencies
类别中:
yarn add [package] --dev 相当于 npm install [package] --save-dev
yarn add [package] --peer
yarn add [package] --optional
dependencies: 正常的运行过程中的依赖 浏览器跑的时候
devDependencies: 开发模式 所用的依赖
peerDependencies: 当你发布项目的时候 可以指定该依赖
optionalDependencies: 可有可无,表示在安装失败的时候一个备选的依赖保证过程
bundleDependencies: 发布项目的时候所用的依赖 不是从npm来的 一起打包发布到
升级依赖包
相当于npm的 npm update
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
移除依赖包
相当于npm的 npm uninstall [package]
yarn remove [package]
安装项目的全部依赖
相当于npm的 npm i
或者 npm install
yarn
或者
yarn install
依赖和版本
在yarn中与npm中类似都有两个依赖和版本文件
依赖项的类型 package.json
依赖项的指定版本 yarn.lock
yarn.cock
文件使机器之间获得一致的安装。
您package.json
将包含所有这些依赖项:
{
"name": "my-project",
"dependencies": {
"package-a": "^1.0.0"
},
"devDependencies": {
"package-b": "^1.2.1"
},
"peerDependencies": {
"package-c": "^2.5.4"
},
"optionalDependencies": {
"package-d": "^3.1.0"
}
}
Yarn使用yarn.lock
项目根目录中的文件。这些“锁定文件”看起来像这样:
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
package-1@^1.0.0:
version "1.0.3"
resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
package-2@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/package-2/-/package-2-2.0.1.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
dependencies:
package-4 "^4.0.0"
package-3@^3.0.0:
version "3.1.9"
resolved "https://registry.npmjs.org/package-3/-/package-3-3.1.9.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
dependencies:
package-4 "^4.5.0"
package-4@^4.0.0, package-4@^4.5.0:
version "4.6.3"
resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
yarn命令
常用命令
1. yarn add
yarn add //添加要在当前包中使用的包。
2. yarn init
yarn init //初始化包的开发。
3. yarn install
yarn install //安装package.json文件中定义的所有依赖项。
4. yarn publish
yarn publish //将包发布到包管理器。
5. yarn remove
yarn remove //从当前包中删除未使用的包。
自定义命令
运行已定义的包脚本
您可以在 package.json
文件中定义要运行的脚本命令
{
"name": "my-package",
"scripts": {
"build": "babel src -d lib",
"test": "jest"
}
}
yarn run [script] [<args>]
如果已在scripts
包中定义了一个对象,则此命令将运行指定的对象[script]
。例如:
yarn run test
运行此命令将执行package.json
中您指定的脚本命令"test"
。
您可以通过在脚本名称后面传递其他参数来将其传递给脚本。
yarn run test -o --watch
运行此命令将执行jest -o --watch
。
[script]
也可以是里面的任何本地安装的可执行文件node_modules/.bin/
。
也可以省略run
这个命令,每个脚本都可以用它的名字执行:
yarn test -o --watch
运行此命令将执行相同的操作yarn run test -o --watch
。请注意,内置cli命令将优先于您的脚本,因此您不应始终在其他脚本中依赖此快捷方式
yarn run env
运行此命令将列出运行时脚本可用的环境变量。
如果要覆盖此命令,可以通过在其中定义自己的"env"
脚本来执行此操作package.json
。
yarn run
如果未指定yarn run
命令的脚本,该run
命令将列出可用于运行包的所有脚本。