设置 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 许可协议。转载请注明出处!