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时,才发现原来前端开发可以这么香.热更新的表现形 ...
随机推荐
- zk基础—4.zk实现分布式功能
大纲 1.zk实现数据发布订阅 2.zk实现负载均衡 3.zk实现分布式命名服务 4.zk实现分布式协调(Master-Worker协同) 5.zk实现分布式通信 6.zk实现Master选举 7.z ...
- HTB-UnderPass
该靶机nmap扫描udp发现161端口snmp服务,利用snmpwalk扫描得到目录信息,使用dirsearch扫描得到一个yml文件,存放数据库账号密码,记录下来,此时需要登录口,使用字典扫描拼接/ ...
- SynchronousQueue底层实现原理剖
一.SynchronousQueue底层实现原理剖 SynchronousQueue(同步移交队列),队列长度为0.作用就是一个线程往队列放数据的时候,必须等待另一个线程从队列中取走数据.同样,从队列 ...
- ipconfig出现媒体状态为媒体已断开连接问题
1.可能是因为路由器或者是交换机没有DHCP功能,需要手动的给电脑配置IP和掩码
- 从车道检测项目入门open cv
从车道检测项目入门open cv 前提声明:非常感谢b站up主 嘉然今天吃带变,感谢其视频的帮助.同时希望各位大佬积积极提出宝贵的意见.(❁´◡`❁)(●'◡'●)╰(°▽°)╯ github地址:h ...
- coreybutler/nvm-windows 简单使用
目录 nvm是什么 安装 简单命令 nvm是什么 Windows电脑node.js管理器.可以方便node.js的安装与切换. 最新版本1.1.11 coreybutler/nvm-windows 有 ...
- 漏洞预警 | WordPress Plugin Radio Player SSRF漏洞
0x00 漏洞编号 CVE-2024-54385 0x01 危险等级 高危 0x02 漏洞概述 WordPress插件Radio Player是一种简单而有效的解决方案,用于将实时流媒体音频添加到您的 ...
- 【记录】Python3|Windows下Python3.11.0的pybluez安装(用于处理蓝牙模块的数据)
参考: 官方安装文档:https://github.com/pybluez/pybluez/blob/master/docs/install.rst 仓库的issue447:https://githu ...
- MySql的information_schema.processlist库学习之"如何检测出大数据sql查询"
1.如何通过MySql检测出大数据sql查询 一般数据库都会存在:information_schema数据库 检测出大数据sql查询[time时间越长说明,数据量越大,要根据公司的限度来衡量,我的思路 ...
- 聊聊 ruoyi-vue ,ruoyi-vue-plus ,ruoyi-vue-pro 谁才是真正的王者
笔者在知乎.Github 上搜索不少快速开发框架 ,很多的话题都绕不开若依 RuoYi . 开源世界 RuoYi 单体框架有三个不同的项目,分别是:ruoyi-vue .ruoyi-vue-plus ...