设置 type
为 "commonjs"
和 "module"
的主要区别是决定了你在项目中使用 模块化语法 的方式。它们是两种不同的模块化规范,各有特点和适用场景。在 Electron 项目中,这种选择会影响你的代码组织和兼容性。
PS:下面都是一堆屁话,试用electron强烈推荐使用
commonjs
语法,因为使用ESM(module)
语法可能会遇到各种各样奇怪的问题,一旦出现问题比较麻烦!!!
type: "commonjs"
)const module = require("module");
module.exports = someValue;
type: "module"
)import module from "module";
export default someValue;
或 export { something };
在 Electron 中,你通常需要写两个部分的代码:
main.js
)。这两部分可以分别使用 CommonJS 或 ESM,选择的设置主要影响 主进程 的代码。
require("electron")
)完全兼容 CommonJS。import
和 export
语法。createRequire
动态加载)。"commonjs"
的场景"module"
的场景node-fetch@3
)。package.json
:
json复制代码{ "type": "commonjs" }
主进程代码(main.js
):
javascript复制代码const { app, BrowserWindow } = require("electron"); app.whenReady().then(() => { const win = new BrowserWindow(); win.loadFile("index.html"); });
优化点:
如果需要 ESM-only 的库(如
node-fetch@3
),用
dynamic import
:
javascript复制代码const fetchData = async () => { const { default: fetch } = await import("node-fetch"); const data = await fetch("https://api.example.com").then((res) => res.json()); console.log(data); };
package.json
:
json复制代码{ "type": "module" }
主进程代码(main.js
):
javascript复制代码import { app, BrowserWindow } from "electron"; app.whenReady().then(() => { const win = new BrowserWindow(); win.loadFile("index.html"); });
如果依赖 CommonJS 库,使用 createRequire
:
javascript复制代码import { createRequire } from "module"; const require = createRequire(import.meta.url); const fs = require("fs"); // 加载 CommonJS 模块
type: "commonjs"
)。这能让你避免一些兼容性问题,同时与大部分 Electron 教程一致。type: "module"
),尤其是当你已经熟悉了 ESM 语法和工具。两种方式都可以用在 Electron 项目中,选择适合你当前需求和学习阶段的即可。
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!