Electron: require() of ES Module



我第一次尝试制作一个简单的应用程序,但每当我尝试导入任何npm包时,都会收到这个错误。我不确定我做错了什么,因为我使用的是npm包electron-reload,这不会引发任何错误。

ERROR:ES模块的require((

这是我的tsconfig.json:

{
"compilerOptions": {
"target": "ES5",                                 
"module": "CommonJS",                              
"outDir": "./app/js/",                                   
"esModuleInterop": true,                             
"forceConsistentCasingInFileNames": true,
"strict": true,                                      
"skipLibCheck": true,                                
},
"exclude": ["./app/js/**/*.js"],
"compileOnSave": true
}

这是抛出错误的代码:

import Hwid from "hwid";
ipcMain.on("get-hwid", (event) => {
console.log(Hwid());
});

最后,这是我的BroswerWindow代码:

const window = new BrowserWindow({
width: 700,
frame: false,
height: 700,
resizable: false,
transparent: true,
roundedCorners: true,
icon: path.join(__dirname, "../design/imgs/dully_logo.png"),
webPreferences: {
contextIsolation: false,
nodeIntegration: true,
preload: path.join(__dirname, "preload.js"),
devTools: false,
},
});
window.loadFile(path.join(__dirname, "../design/index.html"));

我使用TypeScript是因为我更喜欢它而不是普通的JS,我只是纠结于该做什么,或者为什么这个错误会阻止我的开发。我希望包能正常运行,但什么都不起作用。

放置一个条目索引cjs代码为import('./index.js'),在package.json中您已经可以添加"type": "module"

hwid是一个ESM模块,您的tsconfig.json指定使用CommonJS编写模块,CommonJS是require()函数。tsc(或其他编译器(将import语句转换为require()调用,这是ESM不允许的(正如错误所示(。使用可能支持ESM的hwid的旧版本,或者将module更改为'es2020'并将moduleResolution设置为'node'

尝试:const Hwid = require('hwid')

您可能需要检查您的bundler(Webpack、Vite等(是否正常工作,或者如果您还没有开始使用它。

进一步阅读

  • 关于Electron第21457期的评论

最新更新