workspaces
在项目过大的时候,最近越来越流行monorepo。提到monorepo就绕不看workspaces,早期我们会用yarn workspaces,现在npm官方也支持了workspaces. workspaces解决了本地文件系统中如何在一个顶层root package下管理多个子packages的问题,在workspaces声明目录下的package会软链到最上层root package的node_modules中。
直接以官网的例子来说明:
{
"name": "my-project",
"workspaces": [
"packages/a"
]
}
在一个npm包名为my-project的npm包中,存在workspaces配置的目录。
.
+-- package.json
+-- index.js
`-- packages
+-- a
| `-- package.json
并且该最上层的名为my-project的root包,有packages/a子包。此时,我们如果npm install,那么在root package中node_modules中安装的npm包a,指向的是本地的package/a.
.
+-- node_modules
| `-- packages/a -> ../packages/a
+--
+--
`-- packages
+-- a
| `-- package.json
上述的
-- packages/a -> ../packages/a
指的就是从node_modules中a链接到本地npm包的软链