3

我正在将一些存储库迁移到使用带有 Lerna 的纱线工作区的单存储库。包看起来大致是这样的:

|-- packages
    |-- app
    |-- components-1 
    |-- components-2

app与 webpack 捆绑在一起。它包括components-1components-2作为依赖项,以及 React 15.3.2。

components-1包括 React 15.6.1 的对等依赖项。所以它有 React 15.6.1 是一个开发依赖。这是从该包中运行 react-styleguidist 和测试所必需的,并且主要是作为一个单独的 repo 存在的工件,预迁移。

看起来,因为有两个版本的 React,webpack 将捆绑两者,因为两者都在不同的位置成功解析。React 15.3.2 安装在 repo 的 root-levelnode_modules中,而 React 15.6.1 安装在components-1/node_modules.

正如人们所预料的那样,ReactDOM 也会发生同样的情况。

我的解决方案是在应用程序的 webpack 配置中定义react别名react-dom

resolve: {
  alias: {
    'react': path.resolve('../../node_modules/react'),
    'react-dom': path.resolve('../../node_modules/react-dom'),
  },
}

但这对我来说似乎有点 hacky,因为它只能在这个 yarn 工作区设置中工作。

我想知道是否有更好的方法来做到这一点,无论是在应用程序的 webpack 配置中,还是在某种纱线工作区配置中。

4

1 回答 1

0

webpack 根据其文件路径确定模块的唯一性。因此,如果您有两个 react 副本,来自两个单独的节点模块路径,那么是的,webpack 将捆绑两者。但是,如果你说你正在使用 yarn 工作空间,这应该意味着你的 monorepo 应该只有一个node_modules文件夹。

于 2019-05-10T21:54:05.860 回答