所以我找到了一个解决方案,如here所述
如果我更改我的webpack.config.js
文件以向output
对象添加以下属性,即
var config = {
// ...
output: {
// ...
library: 'MyApp',
libraryTarget: 'umd',
umdNamedDefine: true,
}
}
这将我与 webpack 捆绑在一起的文件指定为 UMD module,因此如果我在该文件中有一个函数并将其导出...
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
了我的前端将摄取的内容。