前言
好消息,經過不知道多少年的討論。
electron@28.0.0開始(23.08.31),默認支持esm了。
see
https://github.com/electron/electron/issues/21457
使用方法
- 升級至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
缺失問題
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename)
其他事項
應該知道,electron只是內置了esm
包把esm模塊轉成了cjs,然后在node環境中執行。
所以 preload.js
還是在node環境中執行的,因此仍然采用require()
語法。
也能使用__filename
和 __dirname
。