electron vite搭建项目

### electron 架构组成

electron内部集成了两个运行环境:

    NodeJs环境:称为主进程(Main Process)

    Chromium环境:称为渲染进程(Renderer Process)

可以理解成在主进程中就是在写NodeJs代码,在渲染进程中是在写网页相关的代码(如HTML、CSS、JavaScript等)。

主进程对应的代码文件是main.js以及将来通过require导入到main.js中的模块。

渲染进程对应的文件是index.html以及将来通过link、script、img引入到页面中的代码或资源

![electron-运行原理.png](./img/electron-运行原理.png)

electron文档:https://www.electronjs.org/zh/

electron生命周期API:https://www.electronjs.org/zh/docs/latest/api/app (app内所有事件都是生命周期钩子)

### electron 导包代理

npm 淘宝镜像

```shell

npm config set registry "https://registry.npmmirror.com"

```

electron 淘宝镜像

```shell

npm config set electron_mirror "https://npm.taobao.org/mirrors/electron/"

```

### 创建electron项目

#### 旧版(electron-vue):

1.安装脚手架

```shell

npm install -g @vue/cli

```

2.创建样板代码

```shell

vue init simulatedgreg/electron-vue my-project

```

3.进入项目目录

```shell

cd my-project

```

4.安装依赖

```shell

yarn # 或者 npm install

```

5.运行程序

```shell

yarn dev # 或者 npm run dev

```

#### 新版(Vue CLI Plugin Electron Builder):

1.安装Vue脚手架

```shell

npm install -g @vue/cli #或 yarn global add @vue/cli

```

2.创建项目

```shell

vue create myproject

```

3.进入项目目录

```shell

cd myproject

```

4.调用vue-cli-plugin-electron-builder的生成器:

```shell

vue add electron-builder

```

5.启动

```shell

yarn electron:serve #或 npm run electron:serve

```



 

#### vite脚手架(可能会有一些打包白屏问题):

1.创建项目

```shell

npm init vite@latest #或 yarn create vite

```

2.进入项目目录

```shell

cd myproject

```

3.导入electron和vite插件

```shell

npm install electron -D

npm install vite-plugin-electron -D

```

4.修改vite.config.js

```js

import { defineConfig } from 'vite'

import vue from '@vitejs/plugin-vue'

import electron from 'vite-plugin-electron'

// https://vitejs.dev/config/

export default defineConfig({

  plugins: [vue(), electron({

      entry: "electron/index.js"

  })]

})

```

5.创建electron/index.js(注意使用require引入)

```js

const { app, BrowserWindow } = require('electron')

const path = require('path')

//app 控制应用程序的事件生命周期。

//BrowserWindow 创建并控制浏览器窗口。

let win;

//定义全局变量获取 窗口实例

const createWindow = () => {

    win = new BrowserWindow({

        //

        webPreferences: {

            devTools: true,

            contextIsolation: false,

            nodeIntegration: true

            //允许html页面上的javascipt代码访问nodejs 环境api代码的能力(与node集成的意思)

        },

    webContents: {

      openDevTools: true

    }

    })

    if (app.isPackaged) {

        win.loadFile(path.join(__dirname, "../index.html"));

    } else {

//VITE_DEV_SERVER_HOST 如果是undefined 换成  VITE_DEV_SERVER_HOSTNAME

        win.loadURL(`${process.env['VITE_DEV_SERVER_URL']}`)

    }

}

//isPackage 不好使换下面的

  //  if(process.env.NODE_ENV != 'development'){

      //  win.loadFile(path.join(__dirname, "../index.html"));

  //  }else{

        //win.loadURL(`http://${process.env['VITE_DEV_SERVER_HOSTNAME']}:${process.env['VITE_DEV_SE//RVER_PORT']}`)

   // }

//在Electron完成初始化时被触发

app.whenReady().then(createWindow)

```

6.配置package json,去掉type字段,增加main字段(指向electron的创建窗口js文件)

```json

{

  "name": "electron-vite",

  "private": true,

  "version": "0.0.0",

  "main": "electron/index.js",

  "scripts": {

    "dev": "vite",

    "build": "vue-tsc --noEmit && vite build  &&  electron-builder",

    "preview": "vite preview"

  },

  "dependencies": {

    "vue": "^3.2.37"

  },

  "devDependencies": {

    "@vitejs/plugin-vue": "^3.0.0",

    "electron": "^19.0.10",

    "electron-builder": "^23.1.0",

    "typescript": "^4.6.4",

    "vite": "^3.0.0",

    "vite-plugin-electron": "^0.8.3",

    "vue-tsc": "^0.38.4"

  }

}

```

7.运行

```shell

npm run dev

```

#### 使用模板直接创建 推荐(electron+vite,可根据需要创建vue、react、ts项目)

1.引导式创建项目

```shell

npm create @quick-start/electron

```

2.导包

```shell

npm i

```

3.开启热更新

启动项目后修改渲染进程会自动启用了 HMR,即自动刷新页面,但要主进程进行热重载(重启项目)需要添加 --watch  参数。

package.json

```json

{

  ...

  "scripts": {

    "dev": "electron-vite dev --watch",

  }

  ...

}

```

4.运行

```shell

npm run dev

```

5.项目目录

使用 electron-vite 创建的 Vue 项目,已经规划好了目录的结构,重点来看 `src` 目录:

```

├──build

├──src/

│  ├──main

│  ├──preload

│  └──renderer

├──electron.vite.config.js

└──package.json

```

- `main` 目录对应的是主进程的代码

- `renderer` 目录对应的是渲染进程的代码,即 Vue 的组件

- `preload` 目录对应的是预加脚本的代码

6.一些基础操作

6-1. 设置标题栏

```javascript

// src/main/index.js

// ...

function createWindow() {

  new BroswerWindow({

    // ...

    titleBarStyle: "hidden",

    titleBarOverlay: true,

    // ...

  });

}

```

6-2. 获取平台名称

```javascript

// src/proload/index.js

import { contextBridge } from "electron";

// 暴露一些属性或方法

contextBridge.exposeInMainWorld("electronAPI", {

  platform: process.platform,

});

```

6-3. 将静态模板整合到项目中

    - 将原来的 `assets` 目录替换掉

    - 将 html 结构放到 `App.vue` 的 `template` 中

    - 将 `style.css` 重命名为 `style.less` 导入到 `App.vue` 的 `style` 中

注:由于安全的策略限制在打包应用时字体图标无法正常工作,需要在 `index.html` 做以下调整:

```html

<!-- src/index.html -->

<!DOCTYPE html>

<html>

  <head>

    <meta charset="UTF-8" />

    <title>Electron</title>

    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->

    <meta

      http-equiv="Content-Security-Policy"

      content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; font-src 'self' data:"

    />

  </head>

  <body>

    <div id="app"></div>

    <script type="module" src="/src/main.js"></script>

  </body>

</html>

```

7.打包

```shell

npm run build:win # 或 npm run build:mac  npm run build:linux

```

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值