当前位置: 首页 > 面试题库 >

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

宗政博
2023-03-14
问题内容

我希望能够将React应用程序与Webpack捆绑在一起,以便可以使用与客户端相关的一堆配置来获取,调用和初始化放在CDN上的分布式副本。

看完这个,我设置了我的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: Cannot set property 'MyApp' of undefined,因为thisIIFE内部是undefined。我真的很想了解为什么会这样以及如何解决它的建议。

提前致谢!


问题答案:

让我有种找到了一个解决方案,如所描述这里

如果我更改webpack.config.js文件以将以下属性添加到output对象,即

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应用程序渲染。

如果有人认为这是愚蠢的做法,我很想听听!

有关WEBPACK CONFIG的更多信息

请记住,我已经有一段时间没有接触过此代码了。鉴于它是Java语言,世界可能已经发展了,某些实践可能已经过时了。

这是我的React入口点文件(src/index.js

import 'babel-polyfill';
import React from 'react';
import { render } from 'react-dom';
import Root from './components/Root';
import configureStore from './lib/configureStore';

const store = configureStore();

export const init = (config) => {
  render(
    <Root store={store} config={config} />, 
    document.querySelector(config.selector || "")
  );
}

这是我的Webpack配置(webpack.config.js

var webpack = require('webpack');
var path = require('path');
var loaders = require('./webpack.loaders');

module.exports = {
    entry: [
        'webpack-dev-server/client?http://0.0.0.0:8080', // WebpackDevServer host and port
        'webpack/hot/only-dev-server',
        './src/index.js' // Your appʼs entry point
    ],
    devtool: process.env.WEBPACK_DEVTOOL || 'source-map',
    output: {
        path: path.join(__dirname, 'public'),
        filename: 'bundle.js',
        library: 'Foo',
        libraryTarget: 'umd',
        umdNamedDefine: true,
    },
    resolve: {
        extensions: ['', '.js', '.jsx']
    },
    module: {
        loaders: loaders
    },
    devServer: {
        contentBase: "./public",
            noInfo: true, //  --no-info option
            hot: true,
            inline: true
        },
    plugins: [
        new webpack.NoErrorsPlugin()
    ]
};

如您所见,我的Webpack配置输出my bundle.js,这是我的前端将摄取的内容。



 类似资料:
  • 问题内容: 是否可以使用ReactJavaScript库创建可嵌入的JavaScript小部件,其中: React库被“嵌入”在小部件中 嵌入式React库的版本可能与加载小部件的页面上的React库的版本不同,就像使用jQuery一样。 我正在寻找功能,如所述: http://blog.swirrl.com/articles/creating-asynchronous-embeddable-ja

  • 本文向大家介绍如何编写javascript的gulp插件,包括了如何编写javascript的gulp插件的使用技巧和注意事项,需要的朋友参考一下 很久以前,我们在"细说gulp"随笔中,以压缩JavaScript为例,详细地讲解了如何利用gulp来完成前端自动化。 再来短暂回顾下,当时除了借助gulp之外,我们还利用了第三方gulp插件”gulp-uglify”,来达到压缩JavaScript文

  • 这是出版于2013年的书。编写可维护的JavaScript的重要性不言而喻,特别对于团队工作来讲。统一规范的编码规范、严谨的编码风格,能在代码的维护时节约大量的人力成本。 基本的格式化 缩进层级:缩进层级到底采用制表符(tab)/2个空格/4个空格,都不重要,重要的是在一个团队中约定一种缩进风格。无关优劣,在这里风格统一最重要。另一个重要的点就是,切忌制表符和空格混用。 语句结尾:是否要分号结尾。

  • 本文向大家介绍webpack写jquery插件的环境配置,包括了webpack写jquery插件的环境配置的使用技巧和注意事项,需要的朋友参考一下 客户需求要一个具备树结构、带复选框的下拉选择控件;在网上找到了select2、autocomplete都不满足要求。于是自己用ztree加bootstrap dropdown组合开发了一个下拉树选择控件。决定用webpack打包,开发一个完整的jque

  • Ruby我已经开始在我的Ruby代码中插入不可编辑的文本,我觉得这很烦人。例如,这个简单的rSpec表达式: ...变成了这样: 另一个例子是: ...变成了这样: 如何关闭此功能?

  • 我正在编写Webpack插件,我需要执行相同的技巧,以便在应用程序之前注入。 它将包的入口点更改为某个自定义函数,该函数需要,然后加载原始入口应用程序。 包中的片段 我找不到做这件事的代码,有什么指示吗?