我希望能够将我的React应用程序与Webpack捆绑在一起,以便放入CDN的分布式副本可以通过与客户端相关的一堆配置来源,调用和初始化.
阅读this和this之后,我正在设置我的webpack条目文件,如下所示:
// ... React requires etc. (() => { this.MyApp = (config) => { // some constructor code here } MyApp.prototype.init = () => { ReactDOM.render(<MyReactApp config={MyApp.config} />,someSelector); } })();
这个想法是在我的客户端,我可以做如下的事情:
<script src="./bundle.js" type="text/javascript"></script> <script type="text/javascript"> MyApp.init({ some: "config" }); </script>
我的MyApp #init函数会将我的React应用程序渲染到客户端的某个容器中.
我是否以正确的方式思考这个问题?是否有更简单或更有效的方法来解决这个问题?
我的错误是Uncaught TypeError:无法设置未定义的属性’MyApp’,因为IIFE中的这个是未定义的.我真的很想了解为什么会发生这种情况以及如何解决它的建议.
提前致谢!
所以我找到了一个解决方案,如
here所述
如果我更改我的webpack.config.js文件以将以下属性添加到输出对象,即
var config = { // ... output: { // ... library: 'MyApp',libraryTarget: 'umd',umdNamedDefine: true,} }
这指定我将webpack捆绑为UMD模块的文件,所以如果我在该文件中有一个函数并将其导出…
export const init = (config) => { ReactDOM.render(<MyReactApp config={config} />,someSelector); }
然后,我可以在我的客户端执行以下操作.
<script src="./bundle.js" type="text/javascript"></script> <script type="text/javascript"> MyApp.init({ some: "config" }); </script>
而我的React应用程序呈现.
如果有人认为这是一种愚蠢的做法,我很乐意听到它!