强制纱线将某些模块安装到给定的工作区,而不是将它们移动到monorepo的共享节点模块?

Posted

技术标签:

【中文标题】强制纱线将某些模块安装到给定的工作区,而不是将它们移动到monorepo的共享节点模块?【英文标题】:Force yarn to install certain modules to given workspace, rather than moving them to shared node_modules of monorepo? 【发布时间】:2020-05-03 00:43:52 【问题描述】:

我有一个 monorepo(通过 yarn workspaces)。其中一个工作区是通过 Create React App 创建的 React 应用程序(我认为这很重要,因为 CRA 将 Webpack/Babel 放在自己的 node_modules 中)。另一个工作区是一个纯 javascript 包,带有自己的一组 Webpack + Babel 工具。

我的问题是,当我从纯 JavaScript 工作区启动构建时,我得到了这些:

但是,当我将工作区分离到一个独立目录(使用复制/粘贴)并从那里构建时,它构建得非常好。

所以我的猜测是 monorepo 本身有问题。我还注意到指定的工作区在本地node_modules 中缺少@babelbabel-runtimeregenerator-runtime,所以我从monorepo 的主node_modules 文件夹中复制/粘贴了它们,然后整个事情就构建好了。现在这显然是 yarn monorepo 和 Webpack + Babel junction 架构的一些缺陷。

是否可以强制yarn 将特定模块安装到本地node_modules,而不是通过将它们移动到monorepo 根目录中的共享node_modules 来“帮助我”?

【问题讨论】:

【参考方案1】:

您可以使用 nohoist。这将指示应在本地为软件包安装哪些模块。

【讨论】:

不确定为什么它被否决,似乎是一个合法的答案。也许他们希望通过示例或其他方式获得更多扩展的响应。但是,我要 +1。

以上是关于强制纱线将某些模块安装到给定的工作区,而不是将它们移动到monorepo的共享节点模块?的主要内容,如果未能解决你的问题,请参考以下文章

强制在纱线之前运行 npm install ?

在纱线工作区中,如何强制解决子项目的依赖关系?

如何强制 JBoss 部署使用特定版本的依赖项而不是已安装的模块?

如何编辑通过纱线安装的节点模块?

如何强制 ViewController 将 'b' 而不是 'a' 中的数据导出到下一个 VC?

为 Node 模块强制安装 yarn 而不是 npm install?