【问题标题】:configuring webpack in yarn workspaces在纱线工作区中配置 webpack
【发布时间】:2019-05-10 18:28:09
【问题描述】:

我正在将一些 repos 迁移到使用带有 Lerna 的 yarn 工作区的 monorepo。包大致如下:

|-- 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 的根级 node_modules,而 React 15.6.1 安装在 components-1/node_modules

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

我的解决方案是在应用的 webpack 配置中为 reactreact-dom 定义别名:

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

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

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

【问题讨论】:

    标签: webpack yarnpkg lerna monorepo yarn-workspaces


    【解决方案1】:

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

    【讨论】:

    • 我不确定使用 yarn 工作空间的 monorepo 是否应该只有一个 node_modules 文件夹是否正确。 repo 的根级别应该有一个,每个包中应该有一个。
    • 当两个包使用不同版本的 React 会发生什么?例如,我有一个关于 react 16.13 的公共库和一个关于 react 16.8 的项目。这是如何处理的?
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 2020-09-30
    • 2019-07-13
    • 2020-08-21
    • 2018-08-31
    • 2021-06-03
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多