【问题标题】:Electron: require() of ES ModuleElectron: ES Module 的 require()
【发布时间】:2023-01-12 08:02:51
【问题描述】:

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

ERROR: require() of ES Module

这是我的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 更喜欢它,我只是想知道该怎么做或为什么这个错误会停止我的开发。我希望程序包能正常运行,但没有任何效果。

【问题讨论】:

    标签: javascript typescript electron


    【解决方案1】:

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

    【讨论】:

    • 是的,但现在,我得到:Cannot use import statement outside a module
    • @fxncis 您还需要将您的项目正确迁移到 ESM,您需要将 "type": "module" 添加到 package.json 或重命名所有文件以具有 .mjs 扩展名。某些模块会损坏。动态 require() 需要变成异步动态 import() 等。
    • 是的,但现在那些甚至没有帮助。我仍然在指导同样的错误,我认为这主要是因为 electron 不允许使用 ES6 函数。
    • @fxncis 尝试安装esm 模块并使用-r esm 运行您的应用程序。 (例如node -r esm .
    • 好的,现在出于某种原因我收到此错误? media.discordapp.net/attachments/942646229110759444/…
    【解决方案2】:

    放一个入口索引。cj使用代码 import('./index.js') 并在 package.json 中,您已经可以添加 "type": "module"

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你不能在 TypeScript 中使用 require() 。
      • @0xLogN 停止误导。我在 JS 上处理遗留代码并在 TS 上编写代码。为了将 JS 文件导入 TS,我需要使用 require 而不是 import。
      • 对我不起作用。
      猜你喜欢
      • 2023-01-05
      • 2020-05-31
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2021-12-05
      • 2021-12-28
      相关资源
      最近更新 更多