Electron Adventures: Episode 28: Vue

We tried jQuery, D3, React, and Svelte, so let's try another framework with Electron - Vue.

Create new Vue project

As usual, we do the same steps - create a new project, then add Electron:

$ npx @vue/cli create episode-28-vue
$ npm i --save-dev electron

@vue/cli asks a bunch of questions about what you want, and as far as I can tell, any of them work just fine with Electron. I picked Vue 3 and disabled most of the extras, but if you want to follow along, customize it to your liking.

Then I removed most of the files I didn't need, and only kept or added the ones below.

index.js

A small Electron backend file to start our app. It's identical to our Svelte and React versions, except for different default port number again:

let { app, BrowserWindow } = require("electron")

function createWindow() {
  let win = new BrowserWindow({})
  win.maximize()
  win.loadURL("http://localhost:8080/")
}

app.on("ready", createWindow)

app.on("window-all-closed", () => {
  app.quit()
})

public/index.html

This one is completely unchanged from @vue/cli.

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

src/main.js

This one is also unchanged other than making coding style match the rest of the series with double quotes:

import { createApp } from "vue"
import App from "./App.vue"

createApp(App).mount("#app")

src/App.vue

I removed most of the stuff newly created app starts with and only left very basic one:

<template>
  <h1>Welcome to Vue + Electron!</h1>
</template>

<script>
export default {
  name: "App"
}
</script>

<style global>
body {
  background-color: #444;
  color: #fff;
}
</style>

Start!

You need two terminals to run:

$ npm run serve

And:

$ npx electron .

Result

Here's the results:

electron-adventures-28-screenshot.png

In the next episode we'll try to make Vue app match what we did with Svelte so far.

As usual, all the code for the episode is here.