如何配置Yarn Workspaces以安装packages子目录中嵌套的package.json?
如何配置Yarn Workspaces以安装packages子目录中嵌套的package.json?
嘿,我之前也碰到过一模一样的问题,咱们来一步步捋清楚咋解决~
首先得明白为啥Yarn没在snackbar/example下生成node_modules:你根目录package.json里的workspaces配置只写了packages/*,这意味着Yarn只会把packages下直接的子文件夹(也就是snackbar)当成独立的workspace,而嵌套在snackbar里的example目录,Yarn默认不会自动识别它的package.json。
下面是具体的解决步骤:
1. 扩展Workspaces配置,纳入嵌套的example目录
修改根目录的package.json,把嵌套的example路径添加到workspaces数组里:
{ "workspaces": [ "packages/*", "packages/*/example" ], "packageManager": "yarn@3.6.1", "private": true, // 其他原有配置... }
这个配置的意思是:既包含packages下所有直接子目录,也包含这些子目录下的example目录,这样Yarn就会把snackbar/example也当成一个独立的workspace来处理了。
2. 重新执行安装命令
保存配置后,回到根目录运行:
yarn install
这时候Yarn就会读取snackbar/example/package.json里的依赖,再结合你设置的nmHoistingLimits: workspaces,每个workspace的依赖会优先安装在自己的node_modules目录下,所以snackbar/example里应该就能看到对应的node_modules文件夹了。
额外注意点
- 要确保
snackbar/example/package.json里的name字段是唯一的,Yarn要求每个workspace必须有不重复的名称,不然可能会出现安装报错。 - 如果
example只是snackbar的附属示例项目,不想把它当成独立workspace,也可以把example的依赖移到snackbar/package.json的devDependencies里,然后运行yarn workspace [snackbar的name] install,不过这样依赖会装在snackbar的node_modules里,你可以根据自己的需求选。
备注:内容来源于stack exchange,提问作者flix




