我正在尝试在我的项目中实现纱线工作区+ lerna。我有一个简单的结构:
--package.json
--node_modules/
--@app/
|--client/
|--package.json
|--node_modules/
|--server/
|--package.json
|--node_modules/
|--db/
|--package.json
|--node_modules/其中客户/是一个反应-本地应用程序。我意识到了react本机的问题,并修改了根/package.json,如下所示:
"workspaces": {
"packages": [
"@app/*"
],
"nohoist": [
"**/react-native",
"**/react-native/**",
]
},据我所知,这应该会阻止react本机本身,再加上任何react本机依赖关系的提升。然而,我所经历的是这种反应--像react-native-linear-gradient和react-native-reanimated这样的本地库(它们只存在于client/package.json中)正在被挂载并安装在根级node_modules上。挂起的不仅仅是本机模块。Javascript依赖关系也正在悬挂:
当然,这里甚至不应该使用nohoist选项,因为这些模块只在client/目录中使用过。
那么,为什么要把它们吊到根部呢?
为了更好的衡量,我已经删除了我的每个工作区中的yarn.lock文件,只保留了根级别的一个。在运行lerna clean和rm -rf node_modules之后,我已经在根级运行了yarn install。
有趣的是,这个安装非常长(3-5分钟)。仅仅删除根级别的node_modules甚至需要20多个小时。我一点也不确定纱线workspaces+lerna是否正常。
更多细节
纱线版本- 1.22.10
发布于 2021-02-07 18:28:15
我正在体验的是,react本机-线性-梯度和react原生库(仅存在于client/Package.json中)之类的本机库正在被吊起并安装在根级node_modules上。
这是预期的行为,因为它们不是react-native的依赖项。您必须指定相当多的模式,如:
"nohoist": [
"**/react-native",
"**/react-native/**",
"**/react-native*",
"**/native-base",
"**/react-redux",
// OMG...
]来匹配他们..。
实际上,我建议简单地添加以下内容:
"workspaces": { "nohoist": "**" } 到client/package.json文件。
这将导致client包的所有依赖项都安装在client/node_modules中--就好像它是一个独立的、没有工作区的本地项目一样。
否则,在通常添加新包(尤其是,尤其是本机模块包)时,您必须时刻保持警惕--您的nohoist模式是否反映了您添加的所有库?
此外,自动收费和吊装也有问题。
更笼统和可悲的是,我认为Yarn工作区的去重复功能被高估了。它只稍微减少了磁盘空间的使用,并且可能更简单一些,只需要nohoist所有的东西,并且只在它真正发光的情况下使用工作空间--以便于本地包链接。
https://stackoverflow.com/questions/65984258
复制相似问题