首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElectronJS:必须使用导入加载ES模块

ElectronJS:必须使用导入加载ES模块
EN

Stack Overflow用户
提问于 2021-05-08 03:20:39
回答 2查看 3.9K关注 0票数 8

我刚开始从电子文档学电子。我用ES6 (import/export),他们用require

我在我的package.json中添加了package.json,也将js扩展更改为mjs,但是每次运行npm start (节点版本=> 14 )时,我都会得到以下错误:

代码语言:javascript
运行
复制
App threw an error during load
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/alaeddine/Desktop/electron-app/petro-book/main.mjs
    at Module.load (internal/modules/cjs/loader.js:933:11)
    at Module._load (internal/modules/cjs/loader.js:776:14)
    at Function.f._load (electron/js2c/asar_bundle.js:5:12684)
    at loadApplicationPackage (/Users/alaeddine/Desktop/electron-app/petro-book/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.asar/main.js:110:16)
    at Object.<anonymous> (/Users/alaeddine/Desktop/electron-app/petro-book/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.asar/main.js:222:9)
    at Module._compile (internal/modules/cjs/loader.js:1078:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1108:10)
    at Module.load (internal/modules/cjs/loader.js:935:32)
    at Module._load (internal/modules/cjs/loader.js:776:14)
    at Function.f._load (electron/js2c/asar_bundle.js:5:12684)

Package.json:

代码语言:javascript
运行
复制
{
  "type": "module",
  "name": "petro-book",
  "version": "0.1.0",
  "author": "Menai Ala Eddine",
  "description": "Desktop application for gas stations",
  "main": "main.mjs",
  "scripts": {
    "start": "electron main.mjs"
  },
  "devDependencies": {
    "electron": "^12.0.7"
  }
}

Main.mjs:

代码语言:javascript
运行
复制
import { app, BrowserWindow } from "electron";
import { join } from "path";

function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: join(__dirname, "preload.js"),
    },
  });

  win.loadFile("index.html");
}

app.whenReady().then(() => {
  createWindow();

  app.on("activate", () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow();
    }
  });
});

app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});

preload.js

代码语言:javascript
运行
复制
window.addEventListener("DOMContentLoaded", () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector);
    if (element) element.innerText = text;
  };

  for (const type of ["chrome", "node", "electron"]) {
    replaceText(`${type}-version`, process.versions[type]);
  }
});
EN

回答 2

Stack Overflow用户

发布于 2022-07-12 20:08:35

首先,您必须在node_modules中加载esm。

$ npm安装esm --保存

在配置中放入下面的配置。我的情况是:

代码语言:javascript
运行
复制
  "main": "src/index.cjs",
  "module" : "src/main.mjs",
  "type": "module",

将主脚本放在main.mjs中打开窗口(使用es6样式)。

这里是index.cjs作为启动:

代码语言:javascript
运行
复制
require = require("esm")(module/* , options */)
module.exports = require("./main.mjs")

以及我们在main.mjs中的主要角色

代码语言:javascript
运行
复制
import electron from 'electron';
import path from 'path';

const app = electron.app;
const BrowserWindow = electron.BrowserWindow;

function createWindow() {
  ....
}

在这里登记https://arahutara.wordpress.com/2022/07/13/using-es6-import-in-electron-apps/

希望这能帮上忙。

票数 0
EN

Stack Overflow用户

发布于 2021-05-08 03:29:59

import仅用于ES6模块,仅在NodeJS中使用

代码语言:javascript
运行
复制
const { app, BrowserWindow } = require("electron");
const join = require("path").join;

function createWindow() {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: join(__dirname, "preload.js"),
    },
  });

  win.loadFile("index.html");
}

app.whenReady().then(() => {
  createWindow();

  app.on("activate", () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow();
    }
  });
});

app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});

以上内容在电子文档中得到推荐和说明。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67443778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档