18910140161

Vue-cli-service serve和vue-cli-service build结果不一致??

2021-12-11 12:16:32

272

背景:基于vue-cli初始化的项目,在通过vue-cli-plugin-electron-builder和electron整合时,改变目录结构后,执行npm run electron:serve 后白屏,由此引发的问题复现步骤:1、vue create electron-demo采用vue2.x,默认babel、eslint2、vue add electron-builder,安装electron 和 vue-cli-plugin-electron-builder因electron的入口js默认是src/background.js,和前台页面混在一起了,基于工程化考虑,进行了目录区分。默认目录如下:


顺晟科技:

至此,基础环境准备完毕执行npm run serve,可以正常在http://localhost:8080/ 看到初始化的页面执行npm run electron:build, 可以正常在dist目录下生成electron的打包,进入dist/win-unpack下,可以打开electron-demo.exe 正常看到加载 初始化页面的 桌面端界面。

追加vue.config.js

而对应的在 @vue/cli-service/lib/commands/build 目录下的 index.js 文件中,对entry参数的处理方式并不一致

让我一度怀疑vue-cli-plugin-electron-builder的配置和vue-cli的配置冲突,反复确认后,可以排除vue-cli-plugin-electron-builder的嫌疑,因为我使用命令行直接执行

调整后目录

能力所限,不知道这个是否算是bug? 为什么vue-cli-service serve [entry]vue-cli-service build [entry] 的结果会不一样?

再在浏览器中打开http://localhost:8080/,也是白屏再三比对,发现通过该种方式输出的html页面中,未植入

因此导致初始化页面中的内容未加载,所以白屏!!!而通过 .\node_modules\.bin\vue-cli-service build pages/src/main.js 编译输出的html中,是有这段代码的(index.js的自动植入)

这另我感到很奇怪,即使我一直追踪vue-cli-service的源码,也只是发现了这段区别在 @vue/cli-service/lib/commands/ 目录下的serve.js 文件中接收到entry传入后,有如下处理:

问题描述如下:

疑问:为什么同样一段处理,electron:build生成的结果就可以正常加载页面,而electron:serve加载的页面为白屏?经过仔细排查,翻阅vue-cli-plugin-electron-builder的源码后发现,在传入 rendererProcessFile这个配置后,该插件会通过 vue-cli的插件机制调用api.service.run(‘serve’)这一方法,等同于调用vue-cli-service serve [entry]这个命令对应的方法,rendererProcessFile配置的值会作为 entry传入vue-cli-service

因此导致了vue-cli-service servevue-cli-service build pages/src/main.js 的实际表现一致,而vue-cli-service serve pages/src/main.js 则无法正常将入口entry 植入到 html模板中。

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航