更新我的启动项目的所有依赖项后,我在运行gatsby develop
后在浏览器控制台中注意到以下消息:
React-Hot-Loader: react-🔥-dom patch is not detected. React 16.6+ features may not work.
yarn && yarn develop
不应抛出任何警告。
即使是启动项目也会引发警告。
System:
OS: Windows 10
CPU: (4) x64 Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz
Binaries:
Yarn: 1.13.0 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
npm: 6.4.1 - C:\Program Files\nodejs\npm.CMD
npmPackages:
gatsby: ^2.1.10 => 2.1.10
gatsby-plugin-manifest: ^2.0.18 => 2.0.18
gatsby-plugin-offline: ^2.0.24 => 2.0.24
gatsby-plugin-react-helmet: ^3.0.6 => 3.0.6
gatsby-plugin-styled-components: ^3.0.6 => 3.0.6
gatsby-plugin-typescript: ^2.0.8 => 2.0.8
我可以确认我也看到了这个警告。 我还能够使用 gatsby-starter-default 重现此警告。
我们可能缺少https://github.com/gaearon/react-hot-loader/tree/7089062eac273832102c074a368d5af27e23e0b0#webpack -plugin
这不是什么大问题 atm 因为 react fire :fire: 还不是官方的。
Webpack.config 在这里:
https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/utils/webpack.config.js
@wardpeet我将react-dom
替换@hot-loader/react-dom以删除此警告。
这也有效! 💪
@achmadk @wardpeet你在哪里用 react-dom 替换了
@hot-loader/react-dom ?
我没有在我的代码库中看到它,它应该在 gatsby 代码中的某个地方
例如@JustFly1984 ,我使用来自@kripod 的代码库。 在package.json
文件中, react-dom
里面有dependencies
。 然后用react-dom
替换@hot-loader/react-dom
。
我用 gatsby-starter-default 重现了这个警告。
那么,我们应该怎么做?
等待“反应火力”发布? 或者用@hot-loader/react-dom
替换react-dom
@hot-loader/react-dom
?
这与“反应火”完全无关,表情符号令人困惑。
可以在本地完成的解决方法是将@hot-loader/react-dom
安装为devDependency
并将此挂钩添加到gatsby-node.js
:
exports.onCreateWebpackConfig = ({ getConfig, stage }) => {
const config = getConfig()
if (stage.startsWith('develop') && config.resolve) {
config.resolve.alias = {
...config.resolve.alias,
'react-dom': '@hot-loader/react-dom'
}
}
}
解决方法删除了警告,但..
现在没有热重载吗? (保存文件将刷新我的应用程序页面)
嗨!
这个问题已经沉寂了。 诡异的安静。 👻
我们遇到了很多问题,因此我们目前在 30 天不活动后关闭问题。 距离上次更新已经过去了至少 20 天。
如果我们错过了这个问题,或者如果您想保持打开状态,请在此处回复。 您还可以添加标签“not stale”以保持此问题的开放性!
感谢您成为 Gatsby 社区的一员! 💪💜
不陈旧!
我已将其添加到我们的路线图中,因为它可能会抛出新人,这可能会给他们留下他们做错了什么的印象。
只是要清楚,我们应该从应用变通方法中得到什么? 这会像@misterbridge注意到的那样移除热重载吗? 有没有人找到保持热重载工作的解决方法?
让我尽快解决这个问题
我创建了一个新的 PR https://github.com/gatsbyjs/gatsby/pull/13713如果这可以在几个 repos 上进行测试会很有趣。
看起来这已在 #13713 中修复
我们是否仍然需要exports.onCreateWebpackConfig
补丁来删除最后一个 gatsby 版本中的警告? 或者我们可以忽略警告吗?
使用 React 16.9.0
好像又回来了
我也在新的入门项目中看到了这一点。
您需要在包文件中添加 react-hot-dom 的匹配版本
"@hot-loader/react-dom": "^16.8.6",
在你的 webpack 配置中,你需要添加
别名:{'react-dom':'@hot-loader/react-dom'}
由于它并没有真正破坏任何东西,因此隐藏警告通常是安全的,如我回答的这个堆栈溢出问题中所述:
如果有人可以确认以下几行是进行更改的正确位置,我将准备提交 PR:
我对 Gatsby 有点陌生,但我认为这将是一个相当简单的更改,不需要用户从核心react-dom
包中迁移。
@TheAadithyan的修复有效。 虽然有点烦...
遵循Gatsby API ,最好使用actions.setWebpackConfig
,例如
exports.onCreateWebpackConfig = ({ stage, actions }) => {
if (stage.startsWith("develop")) {
actions.setWebpackConfig({
resolve: {
alias: {
"react-dom": "@hot-loader/react-dom",
},
},
})
}
}
它会自动与默认配置合并。
@antoinerousseau和@ooloth :该补丁是一个不幸的副作用,因为当使用react-modal
从本地文件系统安装了使用file:[path to project]
的包时,它会导致项目无法编译。 真正奇怪的是,从我们的 Azure DevOps 工件安装时,相同的代码运行良好。
删除补丁时不会出现此问题。 我已经用react-modal
作为依赖项的两个不同项目对此进行了测试,并且都因相同的错误而失败。 react-modal
对react-dom
react-modal
有依赖性,但在应用上述补丁时无法解决它。
有关示例存储库,请参阅https://github.com/collector-bank/collector-portal-framework。
file:..
安装一个依赖于react-modal
的本地包。npm run start
。» npm run start [removed for privacy reasons]@Eriks-MBP
> [email protected] start /Users/[removed for privacy reasons]/Projects/[removed for privacy reasons]/FooProject
> npm run develop
> [email protected] develop /Users/[removed for privacy reasons]/Projects/[removed for privacy reasons]/FooProject
> gatsby develop
success open and validate gatsby-configs - 0.029 s
success load plugins - 0.247 s
success onPreInit - 0.015 s
info One or more of your plugins have changed since the last time you ran Gatsby. As
a precaution, we're deleting your site's cache to ensure there's not any stale
data
success initialize cache - 0.031 s
success copy gatsby files - 0.049 s
success onPreBootstrap - 0.020 s
success source and transform nodes - 0.098 s
success Add explicit types - 0.018 s
success Add inferred types - 0.099 s
success Processing types - 0.075 s
success building schema - 0.250 s
success createPages - 0.014 s
success createPagesStatefully - 0.055 s
success onPreExtractQueries - 0.016 s
success update schema - 0.032 s
success extract queries from components - 0.231 s
success write out requires - 0.027 s
success write out redirect data - 0.013 s
success Build manifest and related icons - 0.104 s
success onPostBootstrap - 0.127 s
⠀
info bootstrap finished - 3.117 s
⠀
success run static queries - 0.058 s — 3/3 67.58 queries/second
success run page queries - 0.028 s — 5/5 365.36 queries/second
success start webpack server - 1.300 s — 1/1 7.17 pages/second
ERROR Failed to compile with 2 errors 09:36:39
⠀
This dependency was not found:
⠀
* react-dom in /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-modal/lib/components/Modal.js, /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-onclickoutside/dist/react-onclickoutside.es.js
⠀
To install it, you can run: npm install --save react-dom
ERROR
✖ 「wdm」:
ERROR in /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-modal/lib/components/Modal.js
Module not found: Error: Can't resolve 'react-dom' in '/Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-modal/lib/components'
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-modal/lib/components/Modal.js 16:16-36
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-modal/lib/index.js
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/dist/components/Modal/index.js
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/dist/components/index.js
@ ./src/components/layout.tsx
@ ./src/pages/page-2.tsx
@ ./.cache/sync-requires.js
@ ./.cache/app.js
@ multi ./node_modules/event-source-polyfill/src/eventsource.js (webpack)-hot-middleware/client.js?path=/__webpack_hmr&reload=true&overlay=false ./.cache/app
ERROR in /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-onclickoutside/dist/react-onclickoutside.es.js
Module not found: Error: Can't resolve 'react-dom' in '/Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-onclickoutside/dist'
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-onclickoutside/dist/react-onclickoutside.es.js 2:0-40 199:15-26
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/node_modules/react-datepicker/dist/react-datepicker.min.js
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/dist/common/components/DatePicker/index.js
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/dist/common/components/index.js
@ /Users/[removed for privacy reasons]/Projects/Private/collector-portal-framework-upstream/dist/components/index.js
@ ./src/components/layout.tsx
@ ./src/pages/page-2.tsx
@ ./.cache/sync-requires.js
@ ./.cache/app.js
@ multi ./node_modules/event-source-polyfill/src/eventsource.js (webpack)-hot-middleware/client.js?path=/__webpack_hmr&reload=true&overlay=false ./.cache/app
info ℹ 「wdm」: Failed to compile.
这与“反应火”完全无关,表情符号令人困惑。
可以在本地完成的解决方法是将
@hot-loader/react-dom
安装为devDependency
并将此挂钩添加到gatsby-node.js
:exports.onCreateWebpackConfig = ({ getConfig, stage }) => { const config = getConfig() if (stage.startsWith('develop') && config.resolve) { config.resolve.alias = { ...config.resolve.alias, 'react-dom': '@hot-loader/react-dom' } } }
之后我不得不重新编译,但它起作用了!
@prevolorio你读过这个帖子吗?...
遵循Gatsby API ,最好使用
actions.setWebpackConfig
,例如exports.onCreateWebpackConfig = ({ stage, actions }) => { if (stage.startsWith("develop")) { actions.setWebpackConfig({ resolve: { alias: { "react-dom": "@hot-loader/react-dom", }, }, }) } }
它会自动与默认配置合并。
新人来了。 我把这段代码放在哪里? gatsby-node.js?
@TriStarGod是的,这就是 api 钩子“存在”的地方。 该代码片段应插入gatsby-node.js
@TriStarGod它在我链接的页面上说得很好...
用法:通过从项目根目录中名为 gatsby-node.js 的文件中导出这些 API 来实现这些 API。
我也在 Windows 10 上收到此警告,但在 Ubuntu Linux 或 macOS 上没有。 我想知道此警告是否特定于 Windows 用户。
@kimbaudi我在 windows 系统中也有这个错误,你知道在 linux 的生产环境中是否可以吗??
我为 Gatsby 入门包尝试了此解决方案,但没有奏效。 最近有什么变化吗?
这突然开始出现在我正在从事的项目中,为什么会发生这种情况。 我打破了什么可以忽略警告吗?
+1
也看到这个问题,在 Windows 10 机器上通过 Chrome(如果相关)
+1 这里一样。 并且@hot-loader/react-dom
的解决方法不起作用(尝试了两个版本) - 开发失败Error: Cannot find module 'react-dom/server'
也在我的 WINdows 盒子上工作。 稍后会在我的个人 Macbook 盒子上检查一下,看看我是否得到不同的结果。
自从更新对最新版本做出反应后,我又开始看到这个了。
运行: yarn add react-dom<strong i="5">@npm</strong>:@hot-loader/react-dom
为我解决了这个问题。
来自: react-dom - 热加载版 Rewire - (Yarn) 任何其他系统
运行:
yarn add react-dom<strong i="6">@npm</strong>:@hot-loader/react-dom
为我解决了这个问题。
来自: react-dom - 热加载版 Rewire - (Yarn) 任何其他系统
或npm add @hot-loader/react-dom@[YOUR_REACT_VERSION]
es.: npm add @hot-loader/[email protected]
并添加到 gatsby-node.js:
exports.onCreateWebpackConfig = ({ getConfig, stage }) => {
const config = getConfig()
if (stage.startsWith('develop') && config.resolve) {
config.resolve.alias = {
...config.resolve.alias,
'react-dom': '@hot-loader/react-dom'
}
}
}
运行gatsby develop
为我解决了这个问题。
我仍然需要在所有 gatsby 站点上进行相关修复,以确保更顺畅的开发过程。 否则,在本地主机开发环境中,热重载确实会间歇性地失败。
我正在使用yarn add react-dom<strong i="5">@npm</strong>:@hot-loader/react-dom
但在带有 lerna 的纱线工作区项目中,有一些我无法解决的令人讨厌的问题。 尝试过 nohoist 但它没有像我最初想的那样工作。
好像有人解决了? 我认为这种方法(别名包)可以解决这个问题,但我不是 100% 确定。
安装 `@hot-loader/react-dom" 并将 webpack 配置添加到 gatsby-node.js 是一种解决方法还是永久解决方案?如果它是永久性的,难道不应该将其内置到 Gatsby 中吗?如果是一种解决方法,那将是什么是我们删除它的触发器?
我还想补充一点,我遇到了某些页面在从 Ant Design 4.1.5 更新到 v4.2.0 后根本无法呈现。 他们重构了List.Item
组件以使用钩子,我收到了一个关于函数组件试图返回一个类组件的 React 错误。 应用补丁完全解决了这个问题。 故事寓意:“未检测到 react-🔥-dom 补丁”警告确实会导致问题!
@wardpeet我将
react-dom
替换@hot-loader/react-dom以删除此警告。
感谢它的工作
任何新闻?
我们是否应该像@wardpeet建议的那样继续并在我们的项目中手动修复它?
我不得不说,这是当今如此多的 Web 开发的征兆。 由随机更改引起的随机错误,没有明显的解决方案,不涉及启动一些打击,并希望您尝试修复,以防万一它们起作用并且不真正理解它们为什么会这样做或不这样做。 是的,我应该更多地参与 repos 但嘿,我什至无法让 Gatsby 在没有一堆随机警告的情况下运行,所以我将毫无用处。 我的 2 美分。
每次我开始一个项目时我都会来这里:
https://github.com/gatsbyjs/gatsby-starter-default
所以我写这篇笔记是为了我自己,以及其他任何滚动到这里的人👋(嘿未来的我)
运行此命令 - 但单独运行此命令并不能解决问题:
npm install -D @hot-loader/react-dom
修改gatsby.node.js
以添加以下内容:
exports.onCreateWebpackConfig = ({ stage, actions }) => {
if (stage.startsWith("develop")) {
actions.setWebpackConfig({
resolve: {
alias: {
"react-dom": "@hot-loader/react-dom",
},
},
})
}
}
使用上面的代码而不是这里提到的其他代码,因为:
https://github.com/gatsbyjs/gatsby/issues/11934#issuecomment -538662592
“最好使用 actions.setWebpackConfig,因为它会自动与默认配置合并”
你也可以使用GATSBY_HOT_LOADER=fast-refresh
。 我们很高兴接受 PR 使 @hot-loader 成为开发的默认值
您需要在包文件中添加 react-hot-dom 的匹配版本
"@hot-loader/react-dom": "^16.8.6",
在你的 webpack 配置中,你需要添加
别名:{'react-dom':'@hot-loader/react-dom'}
这是否有助于发现您需要做什么https://github.com/gatsbyjs/gatsby/pull/26927 ?
@wardpeet - 我刚刚经历过这个,是的,非常清楚。 谢谢你。
不确定其他人,但我通过控制台警告发现了它......而不是遇到任何功能故障。
通过指定需要安装的版本在控制台中添加解决问题的步骤是完美的🎉
我尝试了建议的解决方案:
gatsby-config.js
添加了此部分:exports.onCreateWebpackConfig = ({ stage, actions }) => {
if (stage.startsWith('develop')) {
actions.setWebpackConfig({
resolve: {
alias: {
'react-dom': '@hot-loader/react-dom'
}
}
});
}
};
但这对我不起作用。
有什么建议吗?
λ盖茨比信息
系统:
操作系统:Windows 10 10.0.16299
CPU: (8) x64 Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
二进制文件:
节点:14.6.0 - C:\Program Filesnodejsnode.EXE
纱线:1.22.4 - C:\Program Files (x86)\Yarn\binyarn.CMD
npm: 6.14.6 - C:\Program Filesnodejs\npm.CMD
语言:
Python:3.8.1 - /c/Users/ccordero/AppData/Local/Programs/Python/Python38/python
浏览器:
边缘:斯巴达 (41.16299.1004.0)
npm 软件包:
盖茨比:^2.18.18 => 2.24.33
盖茨比插件清单:^2.4.22 => 2.4.22
盖茨比插件离线:^3.2.22 => 3.2.22
gatsby-source-graphql: ^2.7.0 => 2.7.0
gatsby-theme-codebushi: 1.0.0 => 1.0.0
更新:
我回滚了前面的步骤,这个解决方案终于去掉了警告:
运行:
yarn add react-dom<strong i="37">@npm</strong>:@hot-loader/react-dom
为我解决了这个问题。
来自: react-dom - 热加载版 Rewire - (Yarn) 任何其他系统
第1步
运行此命令 - 但单独运行此命令并不能解决问题:
npm install -D @hot-loader/react-dom
第2步
修改
gatsby.node.js
以添加以下内容:exports.onCreateWebpackConfig = ({ stage, actions }) => { if (stage.startsWith("develop")) { actions.setWebpackConfig({ resolve: { alias: { "react-dom": "@hot-loader/react-dom", }, }, }) } }
使用上面的代码而不是这里提到的其他代码,因为:
第11934章(评论)“最好使用 actions.setWebpackConfig,因为它会自动与默认配置合并”
安装对我来说失败了,我必须添加我当前的 react 版本。
来自@zaktwist 的帖子有效(https://github.com/gatsbyjs/gatsby/issues/11934#issuecomment-597560317)
npm add @hot-loader/react-dom@[YOUR_REACT_VERSION]
例如npm add @hot-loader/[email protected]
最有用的评论
这与“反应火”完全无关,表情符号令人困惑。
可以在本地完成的解决方法是将
@hot-loader/react-dom
安装为devDependency
并将此挂钩添加到gatsby-node.js
: