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

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

├─public
└─src
    ├─assets
    ├─components
    ├─App.vue
    └─main.js

调整后目录

├─app/background.js
├─pages
│  ├─public
│  └─src
│      ├─assets
│      ├─components
│      ├─App.vue
│      └─main.js
└─server

追加vue.config.js

module.exports = {
  pages: {
    index: {
      entry: 'pages/src/main.js',
      template: 'pages/public/index.html',
      title: 'Test Index Page',
      // chunks: ['chunk-vendors', 'chunk-common',  'index'],
    },
  },
  devServer: {},
  pluginOptions: {
    electronBuilder: {
      // for vue-cli-plugin electron builder options
      outputDir: 'dist',
      mainProcessFile: 'app/background.js', //  主进程入口
      rendererProcessFile: 'pages/src/main.js', //  页面渲染入口
      // customFileProtocol:'',   //  改变vue 的 baseUrl 和publicPath
      builderOptions: {
        //  for electron builder options
        extraResources: ['server/**/**'],
      },
    },
  },
};

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

问题描述如下:

1、执行npm run electron:serve
2、自动弹出的桌面端应用白屏
3、打开http://localhost:8080/,也是白屏

疑问:为什么同样一段处理,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-plugin-electron-builder的配置和vue-cli的配置冲突,
反复确认后,可以排除vue-cli-plugin-electron-builder的嫌疑,
因为我使用命令行直接执行

.\node_modules\.bin\vue-cli-service serve pages/src/main.js

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

<script type="text/javascript" src="/js/index.js"></script>

因此导致初始化页面中的内容未加载,所以白屏!!!
而通过 .\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传入后,有如下处理:

// line 95
// entry arg
    const entry = args._[0]
    if (entry) {
      webpackConfig.entry = {
        app: api.resolve(entry)
      }
    }

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

//  line 49
    args.entry = args.entry || args._[0]
    if (args.target !== 'app') {
      args.entry = args.entry || 'src/App.vue'
    }

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

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