electron 热更新以及对 ts 的支持
前言
虽然 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 的支持的更多相关文章
- electron 热更新
试用了下,electron 自带的热更新 并不是特别理想. 想自己处理下载更新文件.刚好看到了网上有一个比较好的处理方式.试了下效果还可以. 使用以下命令将此库包含在项目中: npm install ...
- electron热更新与windows下的安装包
帮朋友公司做了点东西,他说有很多bug,我一看,基本问题都是浏览器兼容引起的,而electron内带Chromium内核,正好一直想尝试下electron,所以研究了一波.这里只是简单的使用elect ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- React Native之code-push的热更新(ios android)
React Native之code-push的热更新(ios android) React Native支持大家用React Native技术开发APP,并打包生成一个APP.在动态更新方面React ...
- Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新
1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...
- supersockets支持热更新的服务器实例配置选项
SuperSocket 支持以下配置选项的热更新: * logCommand * idleSessionTimeOut * maxRequestLength * logBasicSessionActi ...
- YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关
YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...
- webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)
1.首先是目录结构 |-node_modules/ #包文件 |-build/ #静态资源生成目录 |-src/ #开发目录 |-js/ |-index.js #入口文件 |-app.js #Reac ...
- ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解
onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l 环境搭建 l 创建demo并 ...
- 使用Fiddler劫持网络资源为前端开发助力(示例:Dynamic CRM 表单开发 也能热更新? )
背景: 使用过vue开发的童鞋应该都知道,在开发vue项目的过程中,有个叫"热更新"的功能特别爽,在传统html开发到初次接触vue时,才发现原来前端开发可以这么香.热更新的表现形 ...
随机推荐
- [T.2] 团队项目:选题和需求分析
项目 内容 这个作业属于哪个课程 2025年春季软件工程(罗杰.任健) 这个作业的要求在哪里 T.2团队项目:选题和需求分析 团队在这个课程的目标是 学习软件工程相关知识,培养编程和团队协作能力,做出 ...
- HTB-UnderPass
该靶机nmap扫描udp发现161端口snmp服务,利用snmpwalk扫描得到目录信息,使用dirsearch扫描得到一个yml文件,存放数据库账号密码,记录下来,此时需要登录口,使用字典扫描拼接/ ...
- centos7防火墙启动关闭
1. 查看防火墙状态 systemctl status firewalld.service 2. 查看对外开放的端口号 firewall-cmd --list-ports 3. 添加端口号 firew ...
- Asp.net mvc基础(十五)EF原理及SQL监控
EF会自动把Where().OrderBy().Select()等这些编译成"表达式树",然后回把表达式树翻译成SQL语句,因此不是"把数据都取到内存中,然后使用集合的方 ...
- 关于全球化大规模混合云 Kubernetes Prometheus 监控体系标准化及 GitOps 自动化改进方案
背景 现状 某司概况: PaaS/SaaS 公司,业务面向全球,包括 东南亚/南亚/中东/欧洲/非洲/美洲/东亚... 生产 k8s 集群数十套,生产非生产 >100 套(多种集群类型,各种公有 ...
- React AntD的Dropdown组件报错:React.Children.only expected to receive a single React element child.可能的n原因
React.Children.only expected to receive a single React element child. Error: React.Children.only exp ...
- html中的em和rem到底该如何使用,自适应效果中如何确定文字大小/字号?
如今手机屏幕繁多,自适应效果中如何确定文字大小/字号? em rem vm vw vh你都了解吗? 先说说em和rem em:继承父级的,假设html的font-size默认为16px,body字体大 ...
- 网鼎杯-nmap
Web 0x01 nmap 查看源码提示: 研究了半天分隔符绕过,后来放弃了,根据题目提示(127.0.01,不用扫外网),尝试扫描/flag并尝试将其输出到1.txt中 -iL /flag -oN ...
- 9.9K star!大模型原生即时通信机器人平台,这个开源项目让AI对话更智能!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "高稳定.支持插件.多模态 - 大模型原生即时通信机器人平台" 项目亮点 ...
- 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II
Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...