javascript - 捆绑为 UMD 的 React 组件在通过另一个 React 应用程序中的脚本标签导入时无法加载依赖项
问题描述
我创建了一个简单的反应组件,我想有条件地将它导入另一个反应应用程序。我设法通过 HTML 脚本标签导入它,然后从window变量中获取它。只要 react 被捆绑在模块中,整个想法就可以工作。我想使用来自父应用程序的外部反应实例,所以我已经像这样配置了 webpack:
const path = require('path');
module.exports = {
entry: './index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'module.js',
library: 'test',
libraryTarget: 'umd',
},
externals: {
'react': {
'commonjs': 'react',
'commonjs2': 'react',
'amd': 'react',
'root': 'React'
}
}
};
编辑:
我已经将外部组件更改{ react: 'React' }
并在父应用程序中将反应分配给window.React
变量。
const Test = (window as any).test.default
console.log(window.React)
console.log(Test)
return <Test />
上面的代码导致相同的错误。
{Children: {…}, Fragment: Symbol(react.fragment), Profiler: Symbol(react.profiler), Component: ƒ, PureComponent: ƒ, …}
ƒ (){return o.default.createElement("p",{style:{color:"green",fontWeight:"bold"}},"Hello, I come from an external module!")}
module.js:1 Uncaught TypeError: Cannot read property 'createElement' of undefined
解决了!
我发现在
加载 UMD 脚本时,React 实例必须在window.React变量中可用。起初,我设法通过在加载脚本之前从 CDN 加载 React 来运行它。最后,我决定在确保window.React可用后动态加载外部组件。它按预期工作。
解决方案
尝试使用一次
externals: { react: 'window.React' }
推荐阅读
- r - r 中的 for 循环以创建矩阵
- c++ - c ++,在struct中找不到用户定义的文字运算符
- python - 点击 selenium python 不起作用
- angular - Angular 构建命令选项
- image - Base64转二进制数据python
- sql - 相关查询以获取 sql oracle 中的开始序列和结束序列
- mirth - 调试 Mirth Connect 服务器日志中的变压器错误
- html - 如何在纯 HTML 视图中保持 SVG 很小?
- c# - 输入字符串的格式不正确 EF6
- jenkins - 在哪里可以找到 Jenkins 1.658 的旧管道插件及其相关依赖项?