我試圖爲通過Django模板系統提供的捆綁前端靜態資源設置熱模塊替換,如果這甚至可能的話。目前,我正在通過livereload刷新頁面,只要編譯資源發生變化,但編譯時間會變得更長,並且任何CSS更改都會觸發整頁重新加載。通過Django模板更新Webpack熱模塊
以下是Django中模板文件的示例。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- Header Links -->
</head>
<body>
<div id="app"></div>
<script type="text/javascript">
window.CONFIG = {
/** Injected application configuration from Django. */
};
</script>
<!-- Webpack bundle url -->
<script src="{{ bundle_url }}"></script>
</body>
</html>
我已經能夠通過的WebPack開發服務器來服務資產,並通過模板變量注入束網址http://localhost:3000/bundle.js
,這樣我就可以看到在視圖中的應用。
的WebPack配置
'use strict';
const webpack = require('webpack');
const CONFIG = require('./config');
/**
* Webpack configuration for a development environment.
* @type {Object}
*/
module.exports = {
devtool: 'cheap-module-eval-source-map',
entry: [
require.resolve('core-js/shim'),
CONFIG.PATHS.ENTRY,
],
output: {
path: CONFIG.PATHS.BUILD,
filename: CONFIG.OUTPUT_FILENAME,
},
module: {
rules: CONFIG.SHARED_RULES.concat([{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
}, {
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}]),
},
resolve: CONFIG.WEBPACK_RESOLVE,
plugins: [
new webpack.HotModuleReplacementPlugin(),
],
};
啓動腳本:
'use strict';
// Crashes the script on unhandled rejections instead of silently ignoring.
process.on('unhandledRejection', (error) => { throw error; });
process.env.NODE_ENV = 'development';
// Vendor
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const chalk = require('chalk');
// Local
const WEBPACK_CONFIG = require('../config/webpack.config.dev');
const CONFIG = require('../config/config');
const PORT = parseInt(process.env.PORT, 10) || CONFIG.DEFAULT_PORT;
const HOST = process.env.HOST || CONFIG.DEFAULT_HOST;
const URL = `http://${HOST}:${PORT}/`;
const compiler = webpack(WEBPACK_CONFIG);
const server = new WebpackDevServer(compiler, {
compress: true,
hot: true,
host: HOST,
stats: 'minimal',
});
server.listen(PORT, HOST, (error) => {
if (error) { return console.log(chalk.red(error)); }
console.log(chalk.cyan(`Starting the development server at ${URL}...`));
['SIGINT', 'SIGTERM'].forEach((signal) => {
process.on(signal,() => {
server.close();
process.exit();
});
});
});
我不確定開發服務器如何觸發熱重裝。我的印象是這個軟件包包含一個連接到dev服務器上的Websocket連接的腳本,並且連接會觸發腳本下載並顯示新的資產。雖然這可能並非如此,但我無法找到任何有關如何傳送熱重新加載的信息。我只發現客戶端收到更新後熱重新加載的工作原理。
我已經這麼做了。前端和後端項目位於兩個完全獨立的存儲庫中,前端資源通過webpack-dev-server中的URL(http:// localhost:3000/bundle.js)而不是本地文件路徑(path/to/bundle.js)在應用程序模板中。我試圖弄清楚的是,如果通過webpack-dev-server不提供應用程序的HTML模板,我可以通過該URL利用webpack-dev-server的熱重載能力。 – IbrewU