以来支持ESM。
forge是从electron中获取包装的工具(repo位于电子/forge
),但该文件似乎不喜欢ESM Imports ...
forge.config.ts
An unhandled rejection has occurred inside Forge:
Error: Must use import to load ES Module: ~\forge.config.ts
require() of ES modules is not supported.
require() of ~\forge.config.ts from ~\node_modules\@electron-forge\core\dist\util\forge-config.js is an ES module file as it is a .ts file whose nearest parent package.json contains "type": "module" which defines all .ts files in that package scope as ES modules.
Instead change the requiring code to use import(), or remove "type": "module" from ~\package.json.
像这样配置(+tsconfig.json
),
type: "module"
似乎使一切变得所有工作...但是无法启动Forge App。
另一方面,像
"module": "node16",
"moduleResolution": "node16",
"moduleDetection": "force",
IT启动了Forge应用程序,一切看起来都还不错,甚至能够导入某些ESM软件包,例如
nanoid...但是与其他类型
electron-store一样,这些类型无法正确识别(类似于此问题)我想问题是... 电子开发的当前状态是什么?我们在一个世界上没有什么可以完美地工作了吗?还是我在这里错过了一步?我觉得我尝试了最可能的配置...
我在github问题上做了
pure esmm。我需要调整一些事情才能让纯ESM为我工作。
package.jsonconfiguration
"module": "commonjs"
"moduleResolution": "node",
SET
{
"type": "module",
"config": {
"forge": "./forge.config.mjs"
}
}
使所有
"type": "module"
.js
config file
为显式ESM支持
.mjs
forge.config.js
ESM进口和出口:
forge.config.mjs
wite配置
import { FusesPlugin } from '@electron-forge/plugin-fuses';
const config = { /* ... */ };
export default config;
// vite.main.config.mjs & vite.preload.config.mjs
export default defineConfig({
build: {
lib: {
formats: ['es'],
// ...
}
}
});
__dirname
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
Import语句
使用:
join
path.join
最关键的部分是处理
import { app } from 'electron';
import { dirname } from 'node:path';
const { app } = require('electron');
const { dirname } = require('path');
和
__dirname
之类的全局变量不存在,因此您必须使用
__dirname