# 深入浅出 Yarn 包管理工具
# workspace
- 开发多个互相依赖的
package
时,workspace
会自动对package
的引用设置软链接(symlink)
,比yarn link
更加方便,且链接仅局限在当前workspace
中,不会对整个系统造成影响 - 所有
package
的依赖会安装在最根目录的node_modules
下,节省磁盘空间,且给了yarn
更大的依赖优化空间 - 所有
package
使用同一个yarn.lock
,更少造成冲突且易于审查
# 如何使用workspace
根目录的package.json设置:
{
"name": "yarn-workspace-demo",
"version": "1.0.0",
"private": true,
"workspaces": [
"packages/*"
],
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
TIP
private
:根目录一般是项目的脚手架,无需发布,"private": true
会确保根目录不被发布出去。workspace
:声明workspace
中package
的路径。值是一个字符串数组,支持Glob
通配符。其中"packages/*"
是常见写法,也可以枚举所有package
:"workspaces": ["package-a", "package-b"]
。
yarn workspace <package_name> <command>
:在指定的package
中运行指定的命令yarn workspaces run <command>
:在所有package
中运行指定的命令,若某个package
中没有对应的命令则会报错yarn workspaces info [--json]
:查看项目中的workspace依赖树yarn <add|remove> <package> -W
:-W: --ignore-workspace-root-check
,允许依赖被安装在workspace
的根目录
TIP
Yarn workspace
只会在根目录安装一个node_modules
,这有利于提升依赖的安装效率和不同package
间的版本复用。而Lerna
默认会进到每一个package
中运行yarn/npm install
,并在每个package
中创建一个node_modules
。
目前社区中最主流的方案,也是yarn
官方推荐的方案,是集成yarn workspace
和lerna
。使用yarn workspace
来管理依赖,使用lerna
来管理npm
包的版本发布。