前言

虽然 Electron 官方宣布支持 TypeScript,但它只是支持了类型定义文件,而不是真正的 TS 开箱即用

比如你的入口文件是 ts,当你运行 electron .启动项目的时候,依然会报错不识别 ts:Unknown file extension ".ts"

运行时

支持ts

所以如果你的 electron 主进程使用了 ts,那你还是需要使用额外的转译插件,将其转为 js 文件给 electron运行,如 esbuild、tsc 、甚至使用完成的工具集 electron-vite

如果你不想手动进行编译操作,那你可以使用node直接运行 ts 插件,如 ts-node、tsx 等等插件,具体如:

// electron-demo/package.json
{
"main": "src/index.ts",
"scripts": {
"dev": "NODE_OPTIONS=\"--import tsx\" electron ."
},
}

但是这个仅仅的 dev 阶段,设计到打包 electron-build 仍然需要你进行编译,而不能识别 ts 文件

不过伴随着 node23 原生支持 ts 的出现,相信不久的将来 electron 真的能做到对 ts 开箱即用般的支持

但目前最新版本的 electron v35 内置的仍然是最后 lts 版本 node v22,so 仍然无法做到直接支持 ts

热更新

但是每次你改动主进程的代码,都需要重新启动项目,这就非常麻烦,好在依然后三方库 electronmon,最将命令改成这样即可

// electron-demo/package.json
{
"main": "src/index.ts",
"scripts": {
"dev": "NODE_OPTIONS=\"--import tsx\" electronmon ."
},
}

构建

构建依然需要将ts 转为 js,又因为使用 esm+ts,我们这么做:修改electron 的启动文件为打包后的文件

// electron-builder.json
{
"extraMetadata": {
"main": "dist/index.js"
},
}

创建 ts 配置文件(主要 tsc 使用)

// tsconfig.json
{
"compilerOptions": {
"outDir": "dist",
"esModuleInterop":true,
// "module": "ESNext" // 默认 cjs }, "include": ["src/**/*"],
"exclude": ["src/render"]
}

编写打包脚本,最后运行它 node ./build.js

// build.js
import { spawnSync } from "node:child_process";
import fsExtra from 'fs-extra'; spawnSync("npx", ["tsc"], { stdio: "inherit", shell: true });
fsExtra.copySync("./src/render","./dist/render");
spawnSync("npx", ["electron-builder"], { stdio: "inherit", shell: true });

后续

如有必要计划启用 esbuild、甚至 vite来完成更复杂的构建内容,当然也可以直接使用 electron-vite (但这将没什么成长意义,也无法理解它的核心,建议先看看作者对此插件的心得笔记

electron 热更新以及对 ts 的支持的更多相关文章

  1. electron 热更新

    试用了下,electron 自带的热更新 并不是特别理想. 想自己处理下载更新文件.刚好看到了网上有一个比较好的处理方式.试了下效果还可以. 使用以下命令将此库包含在项目中: npm install ...

  2. electron热更新与windows下的安装包

    帮朋友公司做了点东西,他说有很多bug,我一看,基本问题都是浏览器兼容引起的,而electron内带Chromium内核,正好一直想尝试下electron,所以研究了一波.这里只是简单的使用elect ...

  3. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  4. React Native之code-push的热更新(ios android)

    React Native之code-push的热更新(ios android) React Native支持大家用React Native技术开发APP,并打包生成一个APP.在动态更新方面React ...

  5. Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新

    1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...

  6. supersockets支持热更新的服务器实例配置选项

    SuperSocket 支持以下配置选项的热更新: * logCommand * idleSessionTimeOut * maxRequestLength * logBasicSessionActi ...

  7. YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关

    YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...

  8. webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)

    1.首先是目录结构 |-node_modules/ #包文件 |-build/ #静态资源生成目录 |-src/ #开发目录 |-js/ |-index.js #入口文件 |-app.js #Reac ...

  9. ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解

    onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l  环境搭建 l  创建demo并 ...

  10. 使用Fiddler劫持网络资源为前端开发助力(示例:Dynamic CRM 表单开发 也能热更新? )

    背景: 使用过vue开发的童鞋应该都知道,在开发vue项目的过程中,有个叫"热更新"的功能特别爽,在传统html开发到初次接触vue时,才发现原来前端开发可以这么香.热更新的表现形 ...

随机推荐

  1. 在 Ubuntu 上安装 Python 3.11、创建虚拟环境并设置 pip 阿里云源的主要命令

    在 Ubuntu 上安装 Python 3.11.创建虚拟环境并设置 pip 阿里云源的主要命令流程如下: 安装 Python 3.11 sudo apt update sudo apt instal ...

  2. Python简单数据分析

    1.分析思路 以贵族价格表为例 a.使用Python连接MySQL数据库 b.从noble_right表查询贵族名称,开通价格 c.将这两组值作为XY轴绘制直方图 2.编写代码: # -*- codi ...

  3. ESP32S3播放音频文件

    ESP32S3播放音频文件 硬件基于立创实战派esp32s3 软件代码基于立创实战派教程修改,分析 播放PCM格式音频 原理图分析 音频芯片ES8311 ES8311_I2C_ADD:0x18 音频功 ...

  4. 康谋分享 | 汽车仿真与AI的结合应用

    在自动驾驶领域,实现高质量的虚拟传感器输出是一项关键的挑战.所有的架构和实现都会涉及来自质量.性能和功能集成等方面的需求.aiSim也不例外,因此我们会更加关注于多个因素的协调,其中,aiSim传感器 ...

  5. DPDI online

    DPDI online @三倍镜 用户名:dpdi 密码 dpdi

  6. 可轻便docker部署的密码保存系统:Vaultwarden

    一.简介 Vaultwarden是著名的Bitwarden项目的一个分支,是一个社区驱动的项目,使用Rust语言编写.它是Bitwarden的轻量级自托管替代方案,完全兼容Bitwarden客户端协议 ...

  7. C# 线程(四)——Task初始

    一.相关介绍 .NetFramework3.0时代实现,C#中多线程.异步编程最佳实践,特点: 1.所有的Task操作的线程来自线程池,避免了频繁的线程创建及销毁 2.含有丰富的Api,能满足我们在开 ...

  8. 一次小而美的重构:使用 C# 在 Avalonia 中生成真正好看的词云

    前言 我之前不是开发 StarBlogPublisher(一款 Markdown 文章发布工具)吗? 当时里面有个分类 词云(Word Cloud) 展示功能. 初版的词云虽然 "能用&qu ...

  9. Python3多线程

    一.进程和线程 进程:是程序的一次执行,每个进程都有自己的地址空间.内存.数据栈及其他记录运行轨迹的辅助数据. 线程:所有的线程都运行在同一个进程当中,共享相同的运行环境.线程有开始.顺序执行和结束三 ...

  10. codeup之分数序列求和

    Description 有如下分数序列 求出次数列的前20项之和. 请将结果的数据类型定义为double类型. Input 无 Output 小数点后保留6位小数,末尾输出换行. Sample Inp ...