2017-09-24 312 views
0

我一直在研究一个涉及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://路径。提前致谢!

回答