我在使用webpack-dev-server进行热重载时遇到麻烦,使用docker。
我使用symfony的webpack-encore,因为我正在将反应组件集成到树枝模板中(通过limnius react bundle)。
但是当我启动命令时:
yarn encore dev-server --hot --config-name=app
我无法访问我的app.js ...
我已经尝试了很多东西,但是对我来说,最好的尝试是:
我的webpack.config.js:
Encore.reset();
Encore.setOutputPath('web/build/front/')
.setPublicPath('/build/front')
.addEntry('app', ['./path/to/client.js'])
.enableReactPreset()
.enableSassLoader()
.configureBabel(babelConfig => {
babelConfig.presets.push('airbnb');
babelConfig.plugins.push('@babel/plugin-proposal-class-properties');
if (Encore.isProduction()) {
babelConfig.plugins.push('transform-react-remove-prop-types');
}
})
.configureDefinePlugin(options => ({
...options,
'process.env': Object.assign(envKeys, options['process.env']),
}))
.enableSourceMaps(!Encore.isProduction())
.enableVersioning(Encore.isProduction())
.cleanupOutputBeforeBuild()
.disableSingleRuntimeChunk();
const client = Encore.getWebpackConfig();
client.name = 'app';
client.devServer = {
public: 'http://my.project.localhost',
host: 'my.project.localhost',
port: 80,
contentBase: `${__dirname}/web/build/front/`,
hot: true,
};
我的命令:
$ /srv/project/node_modules/.bin/encore dev-server --hot --config-name=app --output-public-path=http://my.project.localhost/build/front/
我的结果:
Running webpack-dev-server ...
ℹ 「wds」: Project is running at http://my.project.localhost/
ℹ 「wds」: webpack output is served from http://my.project.localhost/build/front/
ℹ 「wds」: Content not from webpack is served from /srv/project/web/build/front/
DONE Compiled successfully in 1958ms 13:23:01
ℹ 「wdm」: Entrypoint app [big] = app.css app.js
ℹ 「wdm」: Compiled successfully.
然后,如果我尝试加载我的URL: http://my.project.localhost/build/front/app.js
404,未找到任何内容。我在做什么错了?
如果我很好理解,webpack开发服务器不会在build / front /中物理编译我的js(如基本的webpack),而是在由webpack开发服务器创建的服务器上的内存中编译文件?而且我应该能够通过一个很好的URL访问该文件。没有这个技巧,我不能使用热重装吗? 顺便说一句,我尝试使用--host ='0.0.0.0',结果相同。
非常感谢大家!