vue3前端开发系列 - electron开发桌面程序(2023-10月最新版)

1. 说明

本次安装使用的环境版本如下:

组件版本
nodejs18.16.1
npm9.5.1
electron26.3.0
electron-builder24.6.4

2. 创建项目

我是先用pnpm创建了一个vue3+vite+ts项目,然后后续安装的时候使用pnpm安装electron一直有问题。
后来改用npm安装electron才可以的。
还有nodejs的版本问题,这里安装的electron版本是26.3.0,推荐使用nodejs的版本为18.16.1。
否则,可能会出现各种奇奇怪怪的问题。

在安装electron electron-builder时,可能会出现网络连接问题,请配置阿里的源。

pnpm config set registry http://registry.npmmirror.com
npm config set registry http://registry.npmmirror.com
npm config set ELECTRON_MIRROR https://registry.npmmirror.com/-/binary/electron/

npm的config如下:
在这里插入图片描述

pnpm create vite
#输入项目名
Project name: electron-vue-vite
# 选择前端框架
Select a framework: Vue
# 选择语言
Select a variant: Typescript

# 使用npm安装包
npm install

# 安装样式
npm i sass -D

# 这里一定要大写D
npm i electron@v26.3.0 electron-builder -D

# 为了解决同时启动2个服务,以及白屏问题
npm i wait-on concurrently cross-env -D

3. 创建文件夹electron

在根目录创建文件夹electron

3.1 编写脚本electron.js

创建electron/electron.js

// electron/electron.js
const path = require('path');
const { app, BrowserWindow } = require('electron');

app.commandLine.appendSwitch('lang', 'zh-CN') 
const isDev = process.env.IS_DEV == "true" ? true : false;

function createWindow() {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true,
    },
  });

  // and load the index.html of the app.
  // win.loadFile("index.html");
  mainWindow.loadURL(
    isDev
      ? 'http://localhost:5173/'
      : `file://${path.join(__dirname, '../dist/index.html')}`
  );
  // Open the DevTools.
  if (isDev) {
    mainWindow.webContents.openDevTools();
  }
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })

});

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

3.2 编写脚本proload.js

创建electron/proload.js

// electron/preload.js

// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener('DOMContentLoaded', () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
  }

  for (const dependency of ['chrome', 'node', 'electron']) {
    replaceText(`${dependency}-version`, process.versions[dependency])
  }
})

4. 修改package.json

4.1 删除type

删除 “type”:“module” 这行,很重要,否则启动会报错。

4.2 修改scripts

直接用下面覆盖

  "scripts": {
    "dev": "vite --host",
    "build": "vite build",
    "serve": "vite preview",
    "electron": "wait-on tcp:5173 && cross-env IS_DEV=true electron .",
    "electron:dev": "concurrently -k \"cross-env BROWSER=none npm run dev\" \"npm run electron\"",
    "electron:build.win": "npm run build && electron-builder --win --dir",
    "electron:build.linux": "npm run build && electron-builder --linux appImage",
    "electron:build.test": "npm run build && electron-builder --dir",
    "electron:build.exe": "npm run build && electron-builder --win"
  },

注意点:wait-on后面监控的tcp端口要和启动的端口保持一致。

4.3 完整的配置如下

package.json

{
  "name": "electron-vue-vite",
  "author": "硅谷工具人",
  "private": true,
  "version": "0.0.0",
  "main": "electron/electron.js",
  "scripts": {
    "dev": "vite --host",
    "build": "vite build",
    "serve": "vite preview",
    "electron": "wait-on tcp:5173 && cross-env IS_DEV=true electron .",
    "electron:dev": "concurrently -k \"cross-env BROWSER=none npm run dev\" \"npm run electron\"",
    "electron:build.win": "npm run build && electron-builder --win --dir",
    "electron:build.linux": "npm run build && electron-builder --linux appImage",
    "electron:build.test": "npm run build && electron-builder --dir",
    "electron:build.exe": "npm run build && electron-builder --win"
  },
  "dependencies": {
    "vue": "^3.3.4"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.4.0",
    "concurrently": "^8.2.1",
    "cross-env": "^7.0.3",
    "electron": "^26.3.0",
    "electron-builder": "^24.6.4",
    "sass": "^1.69.2",
    "typescript": "^5.2.2",
    "vite": "^4.4.11",
    "vue-tsc": "^1.8.18",
    "wait-on": "^7.0.1"
  },
  "build": {
    "appId": "com.ggtool.knote",
    "productName": "KNote",
    "copyright": "Copyright © 2023 ${author}",
    "mac": {
      "category": "public.app-category.utilities"
    },
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true
    },
    "files": [
      "dist/**/*",
      "electron/**/*"
    ],
    "directories": {
      "buildResources": "assets",
      "output": "dist_electron"
    }
  }
}

5. 修改App.vue

这里指定容器的高度和宽带为800*600,和electron.js中createWindow设置保持相同。

<template>
  <HelloWorld class="container"/>
</template>

<script setup lang="ts">
import HelloWorld from "./components/HelloWorld.vue"
</script>
<style lang="scss" scoped>
.container{
  min-width:800px;
  min-height: 600px;
}
</style>

6. 修改vite.config.ts

在defineConfig中添加

base: process.env.ELECTRON=="true" ? './' : "./",

7. 启动

npm run electron:dev

在这里插入图片描述

8. 打包安装

打包win客户端,绿色包,直接拷贝使用的。

npm run electron:build.win

在这里插入图片描述

打包exe安装包,指定安装路径安装

npm run electron:build.exe

在这里插入图片描述

启动页面
在这里插入图片描述

9. 项目公开地址

项目已传gitee上,可以直接clone使用,欢迎点star。

https://gitee.com/ggtool/electron-vue-vite

10. 疑难问题

10.1 npm ERR! ELECTRON_MIRROR is not a valid npm option

执行命令npm config set ELECTRON_MIRROR https://registry.npmmirror.com/-/binary/electron/ 报错:
npm ERR! ELECTRON_MIRROR is not a valid npm option
使用npm config ls 找到.npmrc的位置:
在这里插入图片描述
打开后,加入下面一行:

ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/

在这里插入图片描述

<think>嗯,用户问的是前端前沿的新技术,我得先回想一下最近前端领域有哪些比较热门的发展。首先,Vue、React、Angular这些主流框架肯定还在不断更新,比如React的Server Components和Vue的Vapor模式。然后是构建工具,Vite现在很流行,可能还有新的变化。 接下来,前端框架方面,SolidJS和Qwik可能算比较新的,它们强调性能优化,特别是Qwik的延迟加载概念。还有像Astro这样的元框架,专注于静态生成和部分水合,可能也是前沿的一部分。 状态管理库的话,Zustand和Jotai这些轻量级库最近挺受欢迎的,不过用户可能更想知道最新的,比如Signia或者其他的。 Web性能优化方面,核心网页指标(Core Web Vitals)是Google强调的,可能涉及到优化CLS、LCP、FID这些指标的技术。还有像Partial Hydration、Islands架构,Astro和Fresh框架用的比较多。 WebAssembly也是一个重要方向,尤其是与Rust结合使用,比如在前端处理高性能计算任务。不过用户可能更关注具体应用案例,比如Figma使用WebAssembly的例子。 CSS方面,新特性像容器查询、层叠式布局、CSS Houdini这些可能属于前沿。还有工具类框架如Tailwind CSS的更新,比如支持动态值或者新的插件。 构建工具方面,除了Vite,Turbopack和Rspack这些基于Rust的工具可能越来越受关注,因为它们提供了更快的构建速度。 TypeScript的持续发展,比如5.0版本的新特性,装饰器、satisfies操作符等,可能也是开发者需要关注的。 跨平台技术的话,Tauri作为Electron的替代,用Rust构建更轻量级的应用。还有React Native的新架构,可能也是重点。 AI在前端的应用,比如用机器学习库TensorFlow.js或者结合ChatGPT做智能组件,这部分可能比较新,但需要谨慎举例,避免夸大。 Web3和区块链方面,虽然热度有所下降,但像ethers.js、web3.js这样的库还是存在,可能有些项目在用。 另外,微前端架构继续发展,比如Module Federation的应用,可能大公司在用,但可能不算最新技术了。 需要检查是否有遗漏,比如Playwright作为测试工具,或者新的浏览器API如View Transition API,WebGPU这些。还有HTMX这种强调HTML扩展的库,虽然不算全新但最近受到关注。 要确保提到的技术确实是前沿,不是已经普及的。比如React Server Components虽然还在演进,但已经有一段时间了。可能需要区分哪些是已经稳定,哪些是新兴的。 最后,组织这些内容,按类别分点,确保用户能清晰理解每个技术的用途和现状。同时避免使用Markdown,用自然的中文表达,保持口语化但信息准确。</think>当前前端技术发展迅速,以下是一些前沿方向和技术概览,按应用场景分类整理: 一、框架与运行时 1. **React Server Components (RSC)** 支持服务端/客户端组件混合渲染,2023年Next.js 13+已集成。特点: - 服务端组件零bundle体积 - 自动代码分割 - 支持异步数据获取 2. **Qwik** 由Builder.io团队开发,核心特性: - 延迟加载(Resumability) - 极快首屏加载速度(<1kb JS启动) - 基于细粒度响应式更新 3. **Astro 3.0** 岛屿架构(Islands Architecture)代表: - 默认SSG+选择性客户端水合 - 支持React/Vue/Solid等多框架组件 - 新增View Transitions API支持 二、构建工具链 1. **Turbopack** (Vercel) Rust编写的增量打包工具,比Webpack快700倍 - 与Next.js深度集成 - 支持React Server Components 2. **Bun** 全栈JavaScript运行时(替代Node.js): - 内置打包/转译/测试功能 - Zig语言开发,启动速度快10倍 - 兼容Node.js/npm生态 三、CSS新生态 1. **CSS Nesting** 原生支持嵌套语法(Chrome 112+): ```css .parent { & .child { color: red } } ``` 2. **CSS Houdini** 底层API开放: - Paint API:自定义绘制 - Layout API:自定义布局 - Animation Worklet:高性能动画 四、浏览器新能力 1. **WebGPU** 新一代图形API: - 比WebGL性能提升3-5倍 - 支持通用计算(GPGPU) - Chrome 113+已支持 2. **View Transitions API** 原生页面过渡动画: ```js document.startViewTransition(() => { updateDOM(); }); ``` 五、新兴开发范式 1. **TypeScript 5.0+** - `satisfies`操作符 - 装饰器标准化 - 模块解析优化 2. **状态管理** - **Jotai**:原子化状态 - **Signia**:细粒度响应式 - **Valtio**:Proxy驱动 六、性能优化方向 1. **Core Web Vitals**优化 - INP取代FID(2024年3月生效) - 字体加载优化(`size-adjust`属性) - 图片优化(AVIF格式普及) 2. **Partial Hydration** 按需激活组件: ```jsx import dynamic from &#39;next/dynamic&#39;; const HydrateOnVisible = dynamic(() => import(&#39;./Component&#39;), { ssr: false, loading: () => <Skeleton /> }); ``` 七、跨平台方案 1. **Tauri 2.0** 构建桌面应用: -Electron包体积小10倍 - 系统WebView渲染 - Rust后端支持 2. **Capacitor 5.0** 混合移动应用: - 支持最新Android/iOS API - 实时热更新 - 插件生态丰富 八、AI工程化 1. **LLM集成** - 智能表单验证(利用GPT-4) - 内容自动生成(@ai-jsx等框架) - 代码生成(GitHub Copilot) 2. **TensorFlow.js新特性** - WebGL加速推理 - 预训练模型仓库 - 浏览器端模型微调 建议实践路径: 1. 先掌握React/Vue等主流框架生态 2. 学习Vite/Turbopack现代构建工具 3. 深入TypeScript类型系统 4. 尝试WebGPU/WebAssembly高性能场景 5. 关注Chrome官方博客获取API更新 当前技术迭代周期约6-12个月,建议保持技术雷达扫描,但避免过度追逐新概念,重点选择与业务场景匹配的技术方案。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅谷工具人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值