【问题标题】:How to? Resolve multiple React apps to same 'react' package PATH using webpack/lerna如何?使用 webpack/lerna 将多个 React 应用程序解析为相同的“react”包 PATH
【发布时间】:2020-06-12 22:39:47
【问题描述】:

更新:

解决了。挂钩在简单的单声道存储库设置中工作正常,但我正在使用的更复杂的单声道存储库必须存在一些模块解析问题。

这是一个 CRA 应用程序的工作示例,TypeScript 组件,在 Lerna 单声道存储库中,该组件和应用程序使用钩子:https://github.com/adamplabarge/react-lerna-hooks

结束更新

第二次更新

我更新了我正在开发的真实应用程序,以将 react 和 react-dom 解析到同一个地方。由于它是一个 CRA 应用程序,我不得不使用 customize-cra 并添加了

  addWebpackAlias({
    ['react$']: path.resolve(__dirname, './node_modules/react/'),
    ['react-dom$']: path.resolve(__dirname, './node_modules/react-dom/')
  })

结束第二次更新

我希望能够在另一个现有的 React 应用程序中使用 Hooks 开发一个 React 组件。

我有 Lerna 的 repo 设置,并且有 /packages/app 和 /packages/component。

我可以使用 $ yarn start 启动应用程序(这是一个 CRA 应用程序),然后我为使用 webpack 配置构建和输出的组件(不是 CRA,只是一个普通的 TypeScript React 组件)运行构建和监视脚本/packages/component/build/index.js 中的 umd 文件。使用组件“main”中的package.json:“build/index.js”。

通过将组件添加到应用程序的 package.json 依赖项中,Lerna 会创建一个指向该组件的链接,我可以通过正常的导入过程在应用程序中使用它。

这很有效,直到添加一个钩子,它在多个 Reacts 问题上阻塞。

我能够让它工作的唯一方法是将 React 和 ReactDOM 添加到根级别 node_modules 并从 /packages/app/node_modules 和 /packages/component/node_modules 中删除这些包。当我这样做时,应用程序和组件都在根级别解析 React 和 ReactDOM 包,它们是完全相同的包。包的路径也完全相同。

我尝试在组件的 webpack 配置文件中设置 externals 键。我尝试过用许多不同的方式和其他外部插件来设置它。我尝试将 react 解析为 /packages/app/node_modules/react 中的 react 包的别名。我什至尝试在 package.json 中设置 file:{the path} 而不是版本。我也尝试过在组件的 package.json 中使用 resolutions 键。

没有任何效果。使用钩子时我可以让它工作的唯一方法是从 /packages/app/node_modules 和 /packages/component/node_modules 中的 node_modules 中删除 react 和 react-dom ,并且只将它放在 /root/nodule_modules 的 package.json 中。 json 和 lerna.json 已设置完毕。

我希望能够在不手动删除每个 lerna 包的 node_modules 中的 react 和 react-dom 的情况下使其正常工作。

还验证了每个版本的 react 都是一样的,并且没有违反 hooks 的规则。当 lerna 包从字面上解析为整个 repo 中的相同 /react/ 包时,它可以工作。

我还尝试将 /packages/component/ 中的 React 包设置为 peerDependencies 或 devDependencies。没有什么不同。

似乎让钩子起作用的唯一方法是当应用程序和组件 find 在同一路径上做出反应时。像 C:\project\node_modules\react

建议?问题?这让我发疯了!

【问题讨论】:

  • 非常感谢您提供如此详细的解释。到现在为止,我觉得我是唯一一个遇到这个问题的倒霉人 :) 将“react”和“react-dom”移动到根目录确实解决了这个问题,但我也在寻找更实际的解决方案。

标签: node.js reactjs webpack lerna


【解决方案1】:

老问题但没有答案,所以这是我的看法。

我的设置遇到了同样的问题:

  • lerna monorepo
  • 多个包(有些带有简单的 JS 类,有些带有 React 组件)
  • 一个 React 应用程序

我通过在所有 React 组件的文件夹中简单地执行以下操作解决了我的问题:

npm link <path to my app's folder>/node_modules/react

此命令允许我的 React 组件使用我的应用程序的 React 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-17
    • 2021-04-19
    • 2020-08-16
    • 1970-01-01
    • 2016-11-27
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多