4. 启用热重载(hot reload)调试(helloworld of vue + electron)

启用热重载(hot reload)调试

使用webpack-dev-server实现

接上一篇:
3. 恢复默认vue目录(helloworld of vue + electron)

每次要调试项目时,打包启动总是要花不少时间,有时只是很小的一次改动,要确认更改后的效果就不得不重新启动程序,这样效率太慢了,不是我们想要的。

“热重载”不只是当你修改文件的时候简单重新加载页面。启用热重载后,当你修改.vue 文件时,该组件的所有实例将在不刷新页面的情况下被替换。它甚至保持了应用程序和被替换组件的当前状态!当你调整模版或者修改样式时,这极大地提高了开发体验。

参考文档 热重载 https://vue-loader.vuejs.org/zh/guide/hot-reload.html
文档详细的描述了用法关闭的方法

安装 webpack-dev-server

我们按文档上的,使用webpack-dev-server来实现热重载

cnpm install webpack-dev-server --save-dev

我们先打包目标文件生成到dist目录

cnpm run pack:dev

启动webpack-dev-server

.\node_modules\.bin\webpack-dev-server --hot

提示出错了

ERROR in Entry module not found: Error: Can't resolve './src'

因为少了webpack配置,加上默认的配置文件路径

.\node_modules\.bin\webpack-dev-server --hot --config .\node_modules\@vue\cli-service\webpack.config.js

运行成功,打开浏览器访问http://localhost:8080/, 试着修改下App.vue, 发现页面也跟着改了。

webpack-dev-server 与 electron 同时启动

接下来只要启动electron 访问http://localhost:8080 就达到我们的目的了, 我们修改一下src/electron/index.js

diff --git a/src/electron/index.js b/src/electron/index.js
index c1f2c90..763d012 100644
--- a/src/electron/index.js
+++ b/src/electron/index.js
@@ -12,11 +12,13 @@ function createWindow () {
     }
   })

-  mainWindow.loadURL(`file://${__dirname}/index.html`)

   // 打开开发者工具
   if (process.env.NODE_ENV === 'development') {
     mainWindow.webContents.openDevTools()
+    mainWindow.loadURL(`http://localhost:8080`)
+  } else {
+    mainWindow.loadURL(`file://${__dirname}/index.html`)
   }

   mainWindow.on('closed', () => {

那我们如何使用一条npm script 来同时启动webpack-dev-serverelectron呢?
尝试命令

.\node_modules\.bin\webpack-dev-server --hot --config .\node_modules\@vue\cli-service\webpack.config.js && electron .

失败了,electron 并没有启动,因为webpack-dev-server启动后, 已经阻塞了,并没有执行后面的命令, 尝试把&&换成&也是不行的
那就写个脚本dev-startup.js同时来启动webpack-dev-serverelectron了,脚本放在helloworld目录下
dev-startup.js:

'use strict'
const electron = require('electron')
const { spawn } = require('child_process')
const Webpack = require('webpack')
const WebpackDevServer = require('webpack-dev-server')
const webpackConfig = require('@vue/cli-service/webpack.config')
const electronConfig = require('./webpack.electron.config')

function startElectron () {
  electronConfig.mode = 'development'
  Webpack(electronConfig).watch({
    aggregateTimeout: 1000
  }, (err, stats) => {
    if (err) {
      console.log(err)
      return
    }
  })
  let electronProcess = spawn(electron, ['.'])
  electronProcess.on('close', () => {
    process.exit()
  })
}

function startServer () {
  webpackConfig.mode = 'development'
  const compiler = Webpack(webpackConfig)
  const devServerOptions = Object.assign({}, webpackConfig.devServer, {
    open: false,
    quiet: true,
    stats: {
      colors: true
    }
  })
  const server = new WebpackDevServer(compiler, devServerOptions)
  server.listen(8080, () => {
    console.log('\nStarting server on http://localhost:8080\n')
  })
}

function devStartup () {
  startServer()
  startElectron()
}
devStartup()

修改package.json

运行 node dev-startup.js, 启动成功了。最后我们再修改一下package.json里的scripts, 尽量简化一下

   "version": "0.1.0",
   "private": false,
   "scripts": {
-    "serve": "npm run debug",
+    "serve": "npm run pack && electron .",
     "build": "npm run pack && electron-builder",
-    "debug": "npm run pack:dev && electron .",
-    "pack": "vue-cli-service build && webpack-cli --config webpack.electron.config.js",
-    "pack:dev": "vue-cli-service build --mode development && webpack-cli --mode development --config webpack.electron.config.js"
+    "dev": "node dev-startup.js",
+    "pack": "vue-cli-service build && webpack-cli --config webpack.electron.config.js"
   },
   "main": "dist/index.js",

这阶段就暂时完成了。

项目地址https://github.com/nononoone/helloworld

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容

  • helloworld 最简框架搭建 记录了最开始搭建这个模板的过程 1. 相关技术栈 2. 安装开发环境2.1. ...
    OneTrader阅读 2,678评论 1 3
  • Phoenix默认的打包工具是Brunch,然而,目前最主流的打包工具肯定要属Webpack了,Vue官方也支持W...
    时见疏星阅读 2,754评论 0 8
  • 个人基于对 Vuejs 的学习制作了一个 Todo 单页应用 Lightodo,功能包括:添加待办事项卡片,对卡片...
    AlessiaLi阅读 21,571评论 16 308
  • 写文章[https://www.jianshu.com/writer#/]注册[https://www.jians...
    过场_ab79阅读 317评论 1 1
  • 那年夏天 是《被风吹过的夏天》 还记得昨天 那个夏天 微风吹过的一瞬间 似乎吹翻一切 只剩寂寞肯沉淀 如今风依旧在...
    deng黎阅读 330评论 0 4