[玩转 electron 系列]esbuild 构建纯 ts electron 项目

背景

继上篇 纯 ts 从零完成 electron 的搭建和构建 做完之后,我发现一个问题,就是用 tsc 去转换 ts 文件虽然没问题,但是如果在 electron 中去引用其他库,则在最终调 electron-builder 的时候,会将所有的 node_modules 全部构建进去,非常浪费时间和资源。若项目比较大,可预想到肯定是会非常慢。所以开了这篇集中解决这个问题。

问题描述

需要有一种比较好的方式去管理 electron 的 ts 文件。
市面上比较好的打包工具有:esbuild, parcel, rollup, webpack

我选择 esbuild 的原因一个是性能。可在 esbuild官网 看到其构建速度是非常快的。且我使用的 electron 版本很新,也能兼容 esbuild,配置看起来也不复杂。那就说干就干吧!

代码

esbuild.ts

import { join } from 'path';
import { BuildOptions, build } from 'esbuild';

const ROOT = __dirname;

const ELECTRON_ROOT = join(ROOT, 'electron')

const createOptions = (): BuildOptions => ({
  bundle: true,
  entryPoints: [
    // main file
    join(ELECTRON_ROOT, 'main.ts'),
    // preload file
    join(ELECTRON_ROOT, 'preload.ts'),
  ],
  treeShaking: true,
  minify: true,
  external: ['electron'],
  format: 'cjs',
  loader: { '.ts': 'ts' },
  outdir: join(ROOT, 'out/'),
  platform: 'node',
  target: 'chrome89',
  tsconfig: join(ELECTRON_ROOT, 'tsconfig.json'),
});

build(createOptions())
  .then(() => {
    console.log('Electron Build successed');
  })
  .catch((error: any) => {
    console.log('Electron Build Failed');
    console.log(error);
  });

稍微解释一下其中几个点:

  1. bundle esbuild 默认是不打包的,所以这个域需要手动设置为 true
  2. minify 这个选项其实做了3个事情,移除空格、重写语法使其更体积更小、重命名变量为更短的名称。分别对应参数 minifyIdentifiers, minifySyntax, minifyWhitespace。据我了解到,minifySyntax 有可能会有问题,所以如果发现生成的文件运行不起来,那很有可能是这里参数的问题。解决方法就是只设置其他两个为 true, minifySyntax 设置为 false 就好了。
  3. target: 我的 electron 版本是 16.*,也是搜了人家的配置刚好和我的配套。
  4. external:如果不加上 electron,跑起来会报错 electron install failed

小结

用了这个之后,安装包的体积减的相对比较少,但是构建速度和安装时间(我生成的是 windows 的安装包)都快了近10倍,巨开心哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装 Node.js 和 npm。然后,可以按照以下步骤构建你的项目: 1. 创建项目文件夹并进入该文件夹: ``` mkdir my-project cd my-project ``` 2. 初始化项目: ``` npm init -y ``` 3. 安装 Vite: ``` npm install vite --save-dev ``` 4. 安装 Vue.js: ``` npm install vue@next --save ``` 5. 安装 TypeScript: ``` npm install typescript --save-dev ``` 6. 安装 Electron: ``` npm install electron --save-dev ``` 7. 安装 Element Plus: ``` npm install element-plus --save ``` 8. 安装 Vuex: ``` npm install vuex --save ``` 9. 创建 TypeScript 配置文件: ``` npx tsc --init ``` 10. 创建主进程和渲染进程的 Electron 入口文件: ``` // 主进程入口文件 main.js const { app, BrowserWindow } = require('electron') function createWindow () { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) win.loadFile('index.html') } app.whenReady().then(() => { createWindow() app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) ``` ``` // 渲染进程入口文件 src/renderer/main.ts import { createApp } from 'vue' import App from './App.vue' import router from './router' import store from './store' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' createApp(App).use(router).use(store).use(ElementPlus).mount('#app') ``` 11. 创建 Vue 组件,例如 App.vue: ``` <template> <div id="app"> <router-view /> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' export default defineComponent({ name: 'App' }) </script> ``` 12. 创建 Vuex store,例如 store/index.ts: ``` import { createStore } from 'vuex' export default createStore({ state: { count: 0 }, mutations: { increment (state) { state.count++ } } }) ``` 13. 创建路由器,例如 router/index.ts: ``` import { createRouter, createWebHashHistory } from 'vue-router' import Home from '../views/Home.vue' const routes = [ { path: '/', name: 'Home', component: Home } ] const router = createRouter({ history: createWebHashHistory(), routes }) export default router ``` 14. 创建主页面组件,例如 views/Home.vue: ``` <template> <div> <h1>{{ message }}</h1> <button @click="increment">Increment</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' import { useStore } from 'vuex' export default defineComponent({ name: 'Home', setup () { const store = useStore() return { message: 'Hello, World!', increment () { store.commit('increment') } } } }) </script> ``` 15. 运行项目: ``` npm run dev ``` 以上就是使用 Vite、Vue.js、TypeScript、Electron、Element Plus 和 Vuex 构建项目的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值