electron-vite-vue/README.md

141 lines
5.2 KiB
Markdown
Raw Normal View History

2020-08-16 12:49:24 +08:00
# electron-vue-vite
2021-11-04 14:28:22 +08:00
2021-11-12 08:35:08 +08:00
![awesome-vite](https://camo.githubusercontent.com/abb97269de2982c379cbc128bba93ba724d8822bfbe082737772bd4feb59cb54/68747470733a2f2f63646e2e7261776769742e636f6d2f73696e647265736f726875732f617765736f6d652f643733303566333864323966656437386661383536353265336136336531353464643865383832392f6d656469612f62616467652e737667)
![GitHub license](https://img.shields.io/github/license/caoxiemeihao/electron-vue-vite?style=flat)
2021-11-04 14:30:32 +08:00
![GitHub stars](https://img.shields.io/github/stars/caoxiemeihao/electron-vue-vite?color=fa6470&style=flat)
![GitHub forks](https://img.shields.io/github/forks/caoxiemeihao/electron-vue-vite?style=flat)
2021-11-12 08:35:08 +08:00
2021-11-04 14:28:22 +08:00
2021-11-09 19:38:57 +08:00
**English | [简体中文](README.zh-CN.md)**
2021-11-12 08:35:08 +08:00
🥳 Very simple `Electron` + `Vue3` + `Vite2` boilerplate.
2020-08-16 20:42:52 +08:00
2022-01-06 10:15:32 +08:00
## Overview
2022-01-10 09:55:03 +08:00
This is an `Electron` category integration template that pursues simplification.
This contains only the most basic files, the most basic dependencies, and the most basic functions. Instead of large and complex design.
The purpose of this is to ensure that the template is flexible enough.
2022-01-06 10:20:50 +08:00
2022-01-07 08:38:52 +08:00
For all that, I still hope that you have a basic understanding for `Electron` `Vite`. Because in addition to the simple structure of the project, the `README` also appears too simplify.
2022-01-06 10:20:50 +08:00
2022-01-07 08:38:52 +08:00
You can learn more details by looking at the source code. Trust me, this template is the simple enough. 😋
2022-01-06 10:15:32 +08:00
2021-11-02 15:06:09 +08:00
## Run Setup
```bash
# clone the project
2022-02-03 08:15:25 +08:00
git clone https://github.com/caoxiemeihao/electron-vue-vite.git
2021-11-02 15:06:09 +08:00
# enter the project directory
cd electron-vue-vite
2021-12-11 10:43:21 +08:00
# install dependency
npm install
2021-11-02 15:06:09 +08:00
# develop
2021-12-11 10:43:21 +08:00
npm run dev
2021-11-02 15:06:09 +08:00
```
2020-08-16 21:00:37 +08:00
2021-11-11 18:29:18 +08:00
## Directory
2022-02-08 10:34:14 +08:00
Once `dev` or `build` npm-script executed will be generate named `dist` folder. It has children dir of same as `packages` folder, the purpose of this design can ensure the correct path calculation.
2021-12-29 09:27:51 +08:00
2021-11-11 18:29:18 +08:00
```tree
2022-02-08 10:34:14 +08:00
├── dist After build, it's generated according to the "packages" directory
2021-12-29 09:27:51 +08:00
├ ├── main
├ ├── preload
├ ├── renderer
2021-11-11 18:29:18 +08:00
├── scripts
2022-01-27 11:27:25 +08:00
├ ├── build.mjs Build script, for -> npm run build
├ ├── vite.config.mjs Marin-process, Preload-script vite-config
├ ├── watch.mjs Develop script, for -> npm run dev
2021-11-11 18:29:18 +08:00
2022-02-08 10:34:14 +08:00
├── packages
2022-01-27 11:27:25 +08:00
├ ├── main Main-process source code
├ ├── preload Preload-script source code
├ ├── renderer Renderer-process source code
├ ├── vite.config.ts Renderer-process vite-config
2021-11-11 18:29:18 +08:00
```
## Use Electron, NodeJs API
2021-11-11 18:29:18 +08:00
2022-01-27 08:26:53 +08:00
> 🚧 By default, Electron don't support the use of API related to Electron and NodeJs in the Renderer-process, but someone still need to use it. If so, you can see the template 👉 **[electron-vite-boilerplate](https://github.com/caoxiemeihao/electron-vite-boilerplate)**
#### All Electron, NodeJs API invoke passed `Preload-script`
2021-11-11 18:29:18 +08:00
2022-02-08 10:34:14 +08:00
* **packages/preload/index.ts**
2021-11-11 18:29:18 +08:00
```typescript
2021-12-20 09:48:32 +08:00
import fs from 'fs'
import { contextBridge, ipcRenderer } from 'electron'
// --------- Expose some API to Renderer-process. ---------
2021-11-11 18:29:18 +08:00
contextBridge.exposeInMainWorld('fs', fs)
contextBridge.exposeInMainWorld('ipcRenderer', ipcRenderer)
```
2022-02-08 10:34:14 +08:00
* **packages/renderer/src/global.d.ts**
2022-01-06 09:21:29 +08:00
```typescript
// Defined on the window
interface Window {
fs: typeof import('fs')
ipcRenderer: import('electron').IpcRenderer
}
```
2022-02-08 10:34:14 +08:00
* **packages/renderer/src/main.ts**
2021-11-11 18:29:18 +08:00
```typescript
2022-01-06 09:21:29 +08:00
// Use Electron, NodeJs API in Renderer-process
2021-11-11 18:29:18 +08:00
console.log('fs', window.fs)
console.log('ipcRenderer', window.ipcRenderer)
```
2021-05-08 17:29:38 +08:00
## Use SerialPort, SQLite3 or other node-native addons in Main-process
2022-01-27 16:08:44 +08:00
- First, yout need to make sure the deps in "dependencies". Because the project still needs it after packaged.
- Main-process, Preload-script are also built with Vite, and they are just built as [build.lib](https://vitejs.dev/config/#build-lib).
So they just need to configure Rollup.
2022-02-05 07:20:50 +08:00
**Click to see more** 👉 [scripts/vite.config.mjs](https://github.com/caoxiemeihao/electron-vue-vite/blob/main/scripts/vite.config.mjs)
```js
export default {
build: {
// built lib for Main-process, Preload-script
lib: {
entry: 'index.ts',
formats: ['cjs'],
fileName: () => '[name].js',
},
rollupOptions: {
// configuration here
external: [
'serialport',
'sqlite3',
],
},
},
}
```
2022-01-27 15:55:20 +08:00
## `dependencies` vs `devDependencies`
2022-01-27 16:08:44 +08:00
- First, you need to know if deps(npm package) are still needed after packaged.
2022-01-27 15:55:20 +08:00
2022-01-27 16:08:44 +08:00
- Like [serialport](https://www.npmjs.com/package/serialport), [sqlite3](https://www.npmjs.com/package/sqlite3) they are node-native module and should be placed in `dependencies`. In addition, Vite will not build them, but treat them as external modules.
2022-01-27 15:55:20 +08:00
2022-01-27 16:08:44 +08:00
- Like [vue](https://www.npmjs.com/package/vue), [react](https://www.npmjs.com/package/react) they are pure javascript module and can be built with Vite, so they can be placed in `devDependencies`. This reduces the volume of the built project.
2022-01-27 15:55:20 +08:00
2022-01-06 10:54:02 +08:00
## Main window
2021-11-11 18:29:18 +08:00
<img width="400px" src="https://raw.githubusercontent.com/caoxiemeihao/blog/main/electron-vue-vite/screenshot/electron-15.png" />
2021-11-02 15:06:09 +08:00
2021-11-13 09:02:37 +08:00
## Wechat
2021-06-20 19:10:27 +08:00
2021-11-11 18:39:55 +08:00
<img width="244px" src="https://raw.githubusercontent.com/caoxiemeihao/blog/main/assets/wechat/group/qrcode.jpg" />