gpt4 book ai didi

javascript - VueJS、Electron 和 Webpack 的问题(热重载)

转载 作者:行者123 更新时间:2023-12-03 03:24:32 27 4
gpt4 key购买 nike

我一直在开发一个涉及 Electron、VueJS 的新项目,并且我正在使用 Webpack 来实现 HMR 功能...我的问题是热模块替换功能由于某种原因无法正常工作。

我有以下配置:

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(Electron初始化等)

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`);
}
});

我不确定我做错了什么。如果我使用 http://localhost:8080/dist/build.jsindex.html ,该应用程序可以在 Electron 中运行,但没有热重载功能(需要刷新页面)...但是如果我使用 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 .

任何帮助将不胜感激。我唯一能想到的是,也许它不喜欢 file:// loadURL() 的路径在 Electron 初始化中。提前致谢!

最佳答案

我建议您使用electron-webpack它提供了您所要求的功能。我已经 fork 了their boilerplate使用 VueJS 实现,您可以在这里查看 https://github.com/kontrollanten/electron-webpack-quick-start

关于javascript - VueJS、Electron 和 Webpack 的问题(热重载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46394916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com