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

```

### 创建和配置一个基于 ElectronVite、Vue3 和 TypeScript 的项目 为了设置一个完整的 `Electron` 项目并集成 `Vite`、`Vue3` 和 `TypeScript`,可以按照以下方法操作: #### 初始化前端部分 (Vite + Vue3 + TypeScript) 可以通过命令行快速创建一个支持 `Vue3` 和 `TypeScript` 的 `Vite` 项目。以下是具体实现方式: 对于 Yarn 用户: ```bash yarn create vite my-electron-vue-app --template vue-ts ``` 如果使用 npm(6.x 版本),则执行如下命令: ```bash npm create vite@latest my-electron-vue-app --template vue-ts ``` 如果是 npm 7+ 或更高版本,则需添加额外的双短横线参数: ```bash npm create vite@latest my-electron-vue-app -- --template vue-ts ``` 完成上述步骤后,进入新创建的项目目录,并安装依赖项: ```bash cd my-electron-vue-app yarn install # 如果使用 NPM 替代此步为 'npm install' ``` 此时已成功初始化了一个基础的 `Vite + Vue3 + TypeScript` 前端框架[^1]。 --- #### 配置 TypeScript 设置 (`tsconfig.json`) 在项目的根目录下找到 `tsconfig.json` 文件,确保其包含必要的编译选项以便更好地适配开发环境需求。例如,指定输出路径以及启用严格模式等配置可能看起来像这样: ```json { "compilerOptions": { "target": "ESNext", "module": "ESNext", "strict": true, "jsx": "preserve", "moduleResolution": "node", "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "outDir": "./dist" }, "include": ["src"], "exclude": ["node_modules", "**/*.spec.ts"] } ``` 以上配置定义了目标 JavaScript 输出标准为 ESNext 并启用了严格的类型检查功能[^2]。 --- #### 添加 Electron 支持 接下来,在现有基础上引入 `Electron` 来增强跨平台桌面应用程序的能力。首先需要安装所需的包: ```bash yarn add electron -D ``` 随后修改 `package.json` 中的脚本来兼容两者的工作流。通常会新增一条启动命令用于同时运行主进程和服务端渲染逻辑: ```json "scripts": { "dev": "vite && concurrently \"electron .\" \"vite\"", "build": "tsc && vite build" }, ``` 这里利用到了第三方库 `concurrently` 实现多任务并发处理;如果没有预先加载它的话记得先单独下载下来再继续下一步骤: ```bash yarn add concurrently -D ``` 最后一步就是编写简单的入口文件来控制窗口行为等内容。一般命名为 `main.js` 存放于源码根目录或者专门划分出来的子文件夹里边儿。下面给出一段基本代码片段作为参考: ```javascript const { app, BrowserWindow } = require('electron'); let win; function createWindow() { win = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: false, nodeIntegration: true, } }); win.loadURL(`http://localhost:${process.env.PORT || 3000}`); } app.whenReady().then(createWindow); ``` 至此整个流程结束,你应该已经能够顺利搭建起一套集成了最新技术栈特性的现代化桌面级解决方案[^3]! --- ### 总结 综上所述,通过合理运用现代工具链组合——即采用 `Vite` 构建高性能模块化体系结构的同时结合强大的静态分析能力赋予开发者更灵活高效的编码体验;再加上轻量级 GUI 层面封装使得最终产物具备高度可移植性和良好用户体验特性。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值