Ответ 1
Так что я вроде нашел решение этой проблемы, как описано здесь
Если я изменю свой файл webpack.config.js
, добавив следующие атрибуты к объекту output
, т.е.
var config = {
// ...
output: {
// ...
library: 'MyApp',
libraryTarget: 'umd',
umdNamedDefine: true,
}
}
Здесь указывается файл, который я связываю с веб-пакетом в качестве модуля 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: 'CreditKudos',
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
, который будет принимать мой интерфейс.