VueJS,Electron和Webpack(Hot Reload)的问题
我一直在研究一个涉及Electron,VueJS的新项目,并且我正在使用Webpack来处理HMR功能......我的问题是热模块替换的东西由于某种原因不工作。VueJS,Electron和Webpack(Hot Reload)的问题
我已经得到了以下配置:
webpack.config.js
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry: './app/index.js',
output: {
path: path.resolve(__dirname, './dist'),
// publicPath: '/dist/',
filename: 'build.js',
},
resolve: {
alias: {
'vue': 'vue/dist/vue.common.js',
},
},
module: {
loaders: [
{
test: /\.vue$/,
loader: 'vue-loader',
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.css/,
loader: 'style-loader!css-loader',
},
],
},
plugins: [
new webpack.ExternalsPlugin('commonjs', [
'electron',
]),
new webpack.HotModuleReplacementPlugin(),
new webpack.LoaderOptionsPlugin({
babel: {
'presets': ['env'],
'plugins': ['transform-runtime'],
},
}),
],
};
的index.html(挂载点Vue公司)
<!DOCTYPE html>
<html>
<head>
<title>Hermes - Empyrion Environment Editor!</title>
<style>
body {
background-color: #222222;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="root"></div>
<script src="http://localhost:8080/webpack-dev-server.js"></script>
</body>
</html>
index.js(电子初始化等)
const electron = require('electron');
const { app, BrowserWindow } = electron;
// Main Window Handle
let mainWindow;
app.on('ready',() => {
let mainWindow = null;
const loadingWindow = new BrowserWindow({
width: 325,
height: 425,
frame: false,
show: false,
});
loadingWindow.once('show',() => {
mainWindow = new BrowserWindow({
width: 1024,
height: 768,
minWidth: 1024,
minHeight: 768,
show: false,
});
mainWindow.webContents.once('dom-ready',() => {
mainWindow.show();
loadingWindow.hide();
loadingWindow.close();
});
mainWindow.loadURL(`file://${__dirname}/index.html`);
mainWindow.on('closed',() => {
mainWindow = null;
});
});
loadingWindow.loadURL(`file://${__dirname}/loading.html`);
loadingWindow.show();
});
app.on('window-all-closed',() => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate',() => {
if (mainWindow === null) {
mainWindow = new BrowserWindow({
width: 1024,
height: 768,
minWidth: 1024,
minHeight: 768,
show: true,
});
mainWindow.webContents.once('dom-ready',() => {
mainWindow.show();
});
mainWindow.loadURL(`file://${__dirname}/index.html`);
}
});
我不知道我在做什么错。如果我在index.html
中使用http://localhost:8080/dist/build.js
,该应用程序在Electron中工作,但没有Hot Reload功能(需要刷新页面)......但是如果我使用http://localhost:8080/webpack-dev-server.js
(我认为这是我应该使用的),则不会收到任何内容在应用程序加载时,只是一个空白窗口。
当我运行的WebPack开发服务器(webpack-dev-server --hot --inline
),我得到的JS控制台下面的输出,但应用程序不会在浏览器中加载(测试:
[WDS] Hot Module Replacement enabled.
它充当如果HMR确实是工作,但应用程序的其余部分加载失败。如果我前往http://localhost:8080/loading.html
虽然,工作正常。我只能假设我没有引用与<script>
标签正确的文件中index.html
。
任何援助将不胜感激。我唯一能想到的就是mayb e它在电子初始化中不喜欢loadURL()
的file://
路径。提前致谢!
我建议您使用electron-webpack,它提供了您要求的功能。我已经使用VueJS分叉了their boilerplate,您可以在这里查看它https://github.com/kontrollanten/electron-webpack-quick-start