最新的前端开发环境搭建工具Vite,官网Vite | 下一代的前端工具链,支持涵盖最新
Electron
在内的任意版本。
npm create vite@latest
此命令类似 npm init
,初始化一个最基础的搭建框架,但很多依赖包没有安装
会弹出一些项目,需用户手动配置:
Ok to proceed? (y) » y
Project name: » vue-project
Select a framework: » Vue
Select a variant: » JavaScript
进入项目文件夹,使用指令 npm i
(npm install
简写形式),自动读取 package.json
,安装依赖
试运行初始的Vite模板项目
npm -i
npm run dev
浏览器访问http://localhost:5173/ 查看
删除模板文件,留出开发空间
删除文件
srcassetsvue.svg
srccomponentsHelloWorld.vue
srcstyle.css
删除代码
srcmain.js
import './style.css'
修改代码
srcApp.vue
<script setup>
</script>
<template>
<div>
Hello vite
</div>
</template>
<style scoped>
</style>
index.html
<title>Hello Vite</title>
因为 Electron
等大型包可能不遵循 npm config set registry https://registry.npmmirror.com
配置的源,仍通过官方源下载。
为顺利下载 Electron
镜像源,可在项目根目录新建 .npmrc
文本文件,并添加以下镜像源
registry=https://registry.npmmirror.com
electron_mirror=https://npmmirror.com/mirrors/electron/
npm i electron@版本号 -D
或者
npm install eelectron@版本号 --save-dev
不指定版本号(npm i electron -D)默认最新版
npm i vite-plugin-electron -D
vite-plugin-electron
是使用 vite 构建 electron 的插件,如果脚本用.ts写 会在构建过程中将 .ts 文件转换为 .js 文件
本项目使用默认 vite.config.js
,更改其内容为:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import electron from 'vite-plugin-electron/simple' // 添加此行 simple表示简单模式
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
electron({ //开始添加起
main: {
entry: 'electron/main.js',
},
preload: {
input: 'electron/preload.js',
},
}),
], //开始添加结束
})
相应的,新建 electron
文件夹,并填充 main.js
,preload.js
main.js
const { app, BrowserWindow, ipcMain } = require("electron");
const path = require("path");
function createWindow() {
const win = new BrowserWindow({
width: 800,
height: 600,
show: false,
// minHeight:600,
// minWidth:800,
autoHideMenuBar: true, // 菜单栏
});
// 这里引入页面 如果说url 需要win.loadUrl()引入
if(process.env['VITE_DEV_SERVER_URL']){
win.loadURL(process.env['VITE_DEV_SERVER_URL'])
}else{
win.loadFile('dist/index.html')
//win.loadFile(path.resolve(__dirname,"../dist/index.html"))
}
win.webContents.openDevTools();
win.on(
"activate",
() => BrowserWindow.getAllWindows().length === 0 && createWindow()
);
// 解决内容空白加载问题
win.on("ready-to-show", () => {
win.show();
});
//一个窗口中的文本加载完成
win.webContents.on("dom-ready", () => {
console.log("2、一个窗口中的文本加载完成");
});
//一个窗口中的文本加载完成
win.webContents.on("close", () => {
console.log("8、关闭窗口");
});
}
app.whenReady().then(() => {
createWindow();
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
// 生命周期
// app初始化完成
app.on("ready", () => {});
// 一个窗口中的文本加载完成
app.on("dom-ready", () => {});
// 所有窗口都被关闭时触发
app.on("window-all-closed", () => {
app.quit();
});
在package.json中,定义主进程入口 (原生 Electron
项目也需要做这一步)
"name": "vite-project",
"private": true,
"version": "0.0.0",
"type": "module",
"main": "dist-electron/main.js", 加这一行
定义了主进程入口后,原来的报错没有了,但还有一些 mjs
和 cjs
的运行兼容问题
如果在 package.json
中定义了
"type": "module"
则NodeJS会使用ES(ESM)规范,导致:
preload.js
在dis-electron中被转换为 preload.mjs
require
的引入模块方法不可用,只能使用 import xxx from 'xxx'
__dirname
不可用
为了继续使用以上三点方法,需告诉NodeJS使用CommonJS规范,做法是删除项目根目录中 package.json
中的"type": "module"
再运行指令,即可成功运行Electron项目
npm run dev
npm run build
会同时生成 dist
和 dist-electron
两个文件夹
只有指令 npm run dev
单独生成 dist-electron
在项目根目录的 index.html
的 head
标签内添加
<!-- 移除内容安全警告 -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'">