前言
好消息,经过不知道多少年的讨论。
electron@28.0.0开始(23.08.31),默认支持esm了。
see
使用方法
- 升级至electron@^28.0.0
- 简单地在
package.json中添加"type": "module", - 把所有
.js文件中的require,module.exports改成import from,export语法。(除了preload.js) - 注意,esm的
import语法中,文件后缀名.js不再能省略,必须显式提供。 - 注意,esm中普通成员要用
export { myFunc }的方式提供。 - 修复
__filename和__dirname缺失问题
js
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename)
打包
直接用老版本工具打包会报错。
需要更新到 @electron/forge@&7.0.0 才能支持esm。
其他事项
如果使用了sandbox, preload.js 还是在node环境中执行的,因此仍然采用require()语法。
也能使用__filename 和 __dirname。
见官方文档。