gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:00:06 27 4
gpt4 key购买 nike

我希望能够将我的 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内的this未定义。我真的很想了解为什么会发生这种情况以及如何解决它的建议。

提前致谢!

最佳答案

所以我找到了一个解决方案,如here所述

如果我更改 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 配置的更多信息

请记住我已经有一段时间没有接触过这段代码了。鉴于它是 Javascript,世界可能已经发生变化,并且某些做法可能已经过时。

这是我的 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 配置输出了我的 bundle.js,这是我的前端将摄取的内容。

关于javascript - 使用 React 和 Webpack 编写可嵌入的 Javascript 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37239731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com