0. 開發准備
安裝好 vscode 、npm / yarn,安裝方法見百度。
1. Electron-vue 安裝
# 如果沒有 vue-cli 的話需要全局安裝 npm install -g vue-cli
# 然后使用 vue-cli 來安裝 electron-vue 的模板 vue init simulatedgreg/electron-vue grpc-client-electron-vue
# 安裝依賴 cd grpc-client-electron-vue yarn # or npm install
# 進入開發模式 yarn run dev # or npm run dev
注1:運行完命令 vue init simulatedgreg/electron-vue hello-world 后,除了 ESLint 選項按 N 鍵選 no 外,其他一路按 Enter 鍵選擇默認配置即可。如下圖所示:
(EsLint 校驗,主要用來規范開發人員的代碼。但有些像縮進、空格、空白行之類的規范,會導致在開發過程中一直報錯,選擇關閉)
注2:當 node 版本高於 12 的時候,會報錯:
Html Webpack Plugin:
ReferenceError: process is not defined
解決方法:打開.electron-vue 文件夾中的 webpack.web.config.js 和 .electron-vue/webpack.renderer.config.js,
在 HtmlWebpackPlugin,添加 templateParameters,如下圖所示:
templateParameters(compilation, assets, options) { return { compilation: compilation, webpack: compilation.getStats().toJson(), webpackConfig: compilation.options, htmlWebpackPlugin: { files: assets, options: options }, process, }; },
注:后面的內容(2/3/4/5)如果不用 BootStrap 則忽略。
2. 將 Bootstrap 和 BootstrapVue 添加到項目中
# With yarn
yarn add bootstrap-vue bootstrap axios
# With npm
npm install bootstrap-vue bootstrap axios
3. 設置 BootstrapVue
接下來,讓我們設置剛剛安裝的 BootstrapVue 包。轉到 src/render/main.js 文件並將這行代碼添加到頂部:
import BootstrapVue from 'bootstrap-vue'
Vue.use(BootstrapVue)
在這里做的事情非常簡單,我們導入了 BoostrapVue 包,然后用 Vue.use()
函數在程序中注冊它,以便 Vue 程序可以識別。
我們還需要將 Bootstrap CSS 文件導入到項目中。將這段代碼段添加到 main.js 文件中:
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
在將必要的模塊導入 Vue 程序后,你的 main.js 文件應該和下面的代碼段類似:

import Vue from 'vue' import axios from 'axios' import App from './App' import router from './router' import store from './store' import 'bootstrap/dist/css/bootstrap.css' import 'bootstrap-vue/dist/bootstrap-vue.css' import BootstrapVue from 'bootstrap-vue' Vue.use(BootstrapVue) if (!process.env.IS_WEB) Vue.use(require('vue-electron')) Vue.http = Vue.prototype.$http = axios Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ components: { App }, router, store, template: '<App/>' }).$mount('#app')
4.創建包含 Bootstrap 組件的 vue 組件
下面開始創建我們的第一個組件,第一個組件是 Navbar 組件。在 components 目錄下創建一個名為 Navbar.vue
的文件,並使用以下代碼更新它:

//src/components/Navbar.vue <template> <div> <b-navbar toggleable="lg" type="dark" variant="success"> <b-container> <b-navbar-brand href="#">Mealzers</b-navbar-brand> <b-navbar-toggle target="nav-collapse"></b-navbar-toggle> <b-collapse id="nav-collapse" is-nav> <!-- Right aligned nav items --> <b-navbar-nav class="ml-auto"> <b-nav-form> <b-form-input size="sm" class="mr-sm-2" placeholder="Search for a meal" v-model="meal" ></b-form-input> <b-button size="sm" class="my-2 my-sm-0" type="submit" @click.prevent="getMeal" >Search</b-button> </b-nav-form> <b-nav-item-dropdown right> <!-- Using 'button-content' slot --> <template slot="button-content"><em>User</em></template> <b-dropdown-item href="#">Profile</b-dropdown-item> <b-dropdown-item href="#">Sign Out</b-dropdown-item> </b-nav-item-dropdown> </b-navbar-nav> </b-collapse> </b-container> </b-navbar> </div> </template> <script> export default { data() { return { meal: '' } }, methods: { getMeal() { } } } </script>
Navbar 組件中包含幾個 BootstrapVue 組件,其中一個是 b-navbar
組件。它是 Navbar 中其他組件的父組件。如果沒有這個組件,Navbar 中的所有其他組件將無法正確呈現。
可以用 type
屬性更改 Navbar 上的文本顏色。Navbar 的 background-color
也可以用 variant
屬性來改變。這些顏色可以是任何正常的 Bootstrap 默認顏色 —— info
、primary
、success
等。
另一個是 b-navbar-brand
組件。這是可以呈現網站徽標的地方。它還包含 variant
和 type
屬性,它們可以分別用於改變 background-color
和 text-color
。
其他 BootstrapVue 組件是:
- b-nav-form
- b-nav-item-dropdown
- b-dropdown-item
- b-navbar-toggle
- b-collapse
- b-nav-item(可以用“disabled”屬性禁用)
- b-navbar-nav
- b-nav-item.
- 更多
BootstrapVue 組件的一個美妙之處在於它們默認是響應式的。所以你無需編寫額外的代碼或用外部庫來使其實現響應式。
還有一個組件是 Card
組件。card 組件允許我們在卡中顯示圖像、文本等。它寫做 b-card
。為了演示它,讓我們在 components 目錄中創建一個 Cards.vue
文件。然后用下面的代碼更新其內容:

<template> <b-container> <div v-if="meals.length"> <b-row> <div v-bind:key="data.index" v-for="data in meals"> <b-col l="4"> <b-card v-bind:title="data.strCategory" v-bind:img-src="data.strCategoryThumb" img-alt="Image" img-top tag="article" style="max-width: 20rem;" class="mb-2"> <b-card-text>{{ `${data.strCategoryDescription.slice(0,100)}...` }}</b-card-text> <b-button href="#" variant="primary">View food</b-button> </b-card> </b-col> </div> </b-row> </div> <div v-else> <h5>No meals available yet 😢</h5> </div> </b-container> </template> <script> import axios from "axios"; export default { data() { return { meals: [] }; }, mounted() { axios .get("https://www.themealdb.com/api/json/v1/1/categories.php") .then(response => { this.meals = response.data.categories; }) .catch(err => { console.log(err); }); } }; </script>
5. 渲染包含 Bootstrap 組件的 vue 組件
為了渲染之前創建的 Navbar
、Cards 組件,需要修改 LandingPage.vue
文件。打開它並使用以下代碼更新:

<template> <div id="wrapper"> <img id="logo" src="~@/assets/logo.png" alt="electron-vue"> <main> <div class="top-side"> <span class="title"> Welcome to your new project! </span> <system-information></system-information> </div> <div class="bottom-side"> <navbar/> <cards /> </div> </main> </div> </template> <script> import Navbar from './Navbar.vue' import Cards from './Cards.vue' import SystemInformation from './LandingPage/SystemInformation' export default { name: 'landing-page', components: { SystemInformation, Cards, Navbar }, methods: { open (link) { this.$electron.shell.openExternal(link) } } } </script> <style> @import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro'); * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Source Sans Pro', sans-serif; } #wrapper { background: radial-gradient( ellipse at top left, rgba(255, 255, 255, 1) 40%, rgba(229, 229, 229, .9) 100% ); height: 100vh; padding: 60px 80px; width: 100vw; } #logo { height: auto; margin-bottom: 20px; width: 420px; } main { display: flex; justify-content: space-between; } main > div { flex-basis: 50%; } .left-side { display: flex; flex-direction: column; } .welcome { color: #555; font-size: 23px; margin-bottom: 10px; } .title { color: #2c3e50; font-size: 20px; font-weight: bold; margin-bottom: 6px; } .title.alt { font-size: 18px; margin-bottom: 10px; } .doc p { color: black; margin-bottom: 10px; } .doc button { font-size: .8em; cursor: pointer; outline: none; padding: 0.75em 2em; border-radius: 2em; display: inline-block; color: #fff; background-color: #4fc08d; transition: all 0.15s ease; box-sizing: border-box; border: 1px solid #4fc08d; } .doc button.alt { color: #42b983; background-color: transparent; } </style>
在這里做的是創建一個 Navbar
、Cards 組件並將其嵌入到 LandingPage.vue
文件中,這時再運行 yarn run dev 命令,可以看到我們的 Demo 程序運行如下: