Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to output .html to disk using Webpack-dev-server and HTML-webpack-plugin

I use webpack and html-webpack-plugin to update my index.html file with the generated script bundle, such as bundle.[hash].js.

Then I have to run webpack-dev-server so I can load that bundle into memory and take advantage of Hot Module Replacement.

This makes the code compile twice.

However, what I would like is for webpack-dev-server to also be able to update the index.html file with the new bundle.[hash].js, because now I have to run webpack followed by webpack-dev-sever. It seems weird to compile twice.

Again, the only reason I run webpack is to get my index.html file updated with the new hash of the bundle. If I could get webpack-dev-server to output an updated index.html to disk, then I could drop the webpack command altogether.

Is this possible? If so, what would the webpack config change be? My webpack config is very long so I didnt think it would help to post it here.

like image 837
TetraDev Avatar asked Jun 15 '16 00:06

TetraDev


People also ask

How does html webpack plugin work?

The HtmlWebpackPlugin simplifies creation of HTML files to serve your webpack bundles. This is especially useful for webpack bundles that include a hash in the filename which changes every compilation.

How do you tell the webpack dev server to serve Index html for any route?

To tell Webpack dev server to serve index. html for any route, we can set the historyApiFallback. index property to 'index. html' .


2 Answers

I think this is exactly what you need: https://github.com/jantimon/html-webpack-harddisk-plugin

webpack-dev-server saves the updated HTML in memory. With this plugin, it will also write it to the file system.

like image 176
Sergio Cinos Avatar answered Oct 19 '22 06:10

Sergio Cinos


webpack-dev-server would store the compiled bundle in memory, and won't write the bundle to ouput directory, so I think you don't need to add [hash] in bundle name when using webpack-dev-server,

you could have three webpack config files, say webpack.common.js, webpack.dev.js and webpack.prod.js.

webpack.common.js contains common configurations which can be merged with other configurations by using webpack-merge

webpack.dev.js is used for webpack-dev-server, and output filename should be bundle.js

webpack.prod.js is used for production, and the output filename should be bundle.[hash].js

then you could simply run webpack-dev-server webpack.dev.js

like image 43
MarkoCen Avatar answered Oct 19 '22 06:10

MarkoCen