我在我的 Gatsby 项目中更新了一些 npm 包,现在在控制台中看到以下警告:
React-hot-loader: react--dom 补丁未检测到。React 16.6+ 的功能可能无法正常工作。
然而,当我查看源代码时,发现有一个注释:
// 实际上一切都正常...
这个警告实际上是什么意思?我应该修复它还是让它保持不变?
我在我的 Gatsby 项目中更新了一些 npm 包,现在在控制台中看到以下警告:
React-hot-loader: react--dom 补丁未检测到。React 16.6+ 的功能可能无法正常工作。
然而,当我查看源代码时,发现有一个注释:
// 实际上一切都正常...
这个警告实际上是什么意思?我应该修复它还是让它保持不变?
根据我上面的评论,看起来react-hot-loader
想要 @hot-loader/react-dom
而不是标准的react-dom
包:
就个人而言,我有点担心更换它,因为react-dom
是任何基于react
的应用程序的核心部分。此外,根据一些链接问题和代码注释,看起来这只是支持新的react功能(如hooks)的短期解决方法。
所以我想有两个选择:
更新
您可以这样禁用警告:
import { hot, setConfig } from 'react-hot-loader'
setConfig({
showReactDomPatchNotification: false
})
react-dom
替换为其他替代品。请参见:https://github.com/gaearon/ - Slboximport {hot} from 'react-hot-loader/root'
,有没有什么方法可以做到这一点?文档建议使用较新的根导入,因为它对JS错误更具弹性。https://github.com/cdharris/react-app-rewire-hot-loader - ekfuhrmannimport
语句分成import { setConfig } from 'react-hot-loader'
和import { hot } from 'react-hot-loader/root'
。 - Greg Venech@hot-loader/react-dom
添加到您的项目中,请注意以下命令:yarn add @hot-loader/react-dom@[YOUR_REACT_VERSION]
然后需要在你的Webpack配置文件中为它添加解析别名:
resolve: {
alias: {
'react-dom': '@hot-loader/react-dom'
}
}
想要获取更多信息,请阅读其文档.
截至2020年夏季,这是在Gatsby的GitHub存储库上建议的当前解决方案:
运行此命令-但是仅运行此命令不能解决问题:
npm install -D @hot-loader/react-dom
// or
yarn add -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",
},
},
})
}
}
重新启动gatsby develop
。警告消失了。
hot-loader / react-dom
不是“第三方”库-它与应用到dev mode
的一些补丁相同的react-dom
(您可以查看构建脚本)。在第一步中,您应该按照以下方式运行它:
npm i @hot-loader/react-dom@YOUR_REACT_VERSION
由于 Gatsby 使用 React 版本 ^16.12.0,如果在不指定 React 版本的情况下运行上面的命令,则会安装 ^17.0.1 版本,该版本不兼容 ^16.x 版本。