# 深入浅出 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包的版本发布。