使用React和Webpack编写可嵌入的Javascript插件

前端之家收集整理的这篇文章主要介绍了使用React和Webpack编写可嵌入的Javascript插件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够将我的React应用程序与Webpack捆绑在一起,以便放入CDN的分布式副本可以通过与客户端相关的一堆配置来源,调用和初始化.

阅读thisthis之后,我正在设置我的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应用程序呈现.

如果有人认为这是一种愚蠢的做法,我很乐意听到它!

猜你在找的React相关文章