如何解决所有 CommonJS 模块中的动态导入。 (电子商店)

问题描述 投票:0回答:1

我正在使用 Electron 开发桌面应用程序,并且本地数据存储存在问题。我的目标是检查用户是否已使用本地存储的令牌登录。如果令牌存在,应用程序应直接打开主窗口。否则,它应该首先显示加载窗口和登录窗口

(console.log("Token is Null")
)。

但是,当我尝试导入

electron-store
库时,出现错误。

const Store = require('electron-store');
const store = new Store();

let mainWindow;

function createMainWindow(alrealdyLogin) {
    mainWindow = new BrowserWindow({
        width: 300,
        height: 400,
        frame: false,
        show: true,
        transparent: false,
        resizable: false,
        fullscreenable: false,
        titleBarStyle: 'customButtonsOnHover',
        webPreferences: {
            preload: path.join(__dirname, 'preload.js'),
            contextIsolation: true,
            enableRemoteModule: false,
            nodeIntegration: false
        },
        icon: path.join(__dirname, 'icon.png')


    });

    mainWindow.loadFile('html/loading.html');
}

app.on('ready', () => {
    const token = store.get('token');

    if (token) {
        createLoginWindow(false);
        createMainWindow();
    } else {
        createLoadingWindow(true);
        createLoginWindow();
    }
});

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

app.on('activate', () => {
    const token = localStorage.getItem('token');
    if (BrowserWindow.getAllWindows().length === 0) token == null ? console.log("Token is Null") : createMainWindow();
});

错误:

应用程序在加载过程中抛出错误错误[ERR_REQUIRE_ESM]:ES模块C:\ Users \ Narzay \ Projets \ Meagan Client \ Launcher Electron的require() 不支持来自 C:\Users\Narzay\Projets\Meagan Client\Launcher Electron\main.js 的 ode_modules lectron-store\index.js。
相反,将 C:\Users\Narzay\Projets\Meagan Client\Launcher Electron\main.js 中的 index.js 的 require 更改为动态 import(),该动态 import() 在所有 CommonJS 模块中都可用。
在c._load(节点:电子/js2c/node_init:2:16955) 在对象。 (C:\Users\Narzay\Projets\Meagan Client\Launcher Electron\main.js:3:15)

警报弹出窗口:

主进程中发生 JavaScript 错误

未捕获的异常:

错误 [ERR_REQUIRE_ESM]:ES 模块 C:\Users\Narzay\Projets\Meagan Client\Launcher Electron 的 require() ode_modules lectron-store\index.js 来自 不支持 C:\Users\Narzay\Projets\Meagan Client\Launcher Electron\main.js。相反,将 C:\Users\Narzay\Projets\Meagan Client\Launcher Electron\main.js 中的 index.js 的 require 更改为动态 import() ,该动态 import() 在所有 CommonJS 模块中都可用。 在c._load(节点:电子/js2c/node_init:2:16955) 在对象。 (C:\Users\Narzay\Projets\Meagan Client\Launcher 电子\main.js:3:15)

我想恢复“localStorage”中的“token”值:

localStorage.setItem('token', data.token);

javascript reactjs node.js windows electron
1个回答
0
投票

只需更改此:

const Store = require('electron-store');

对此:

const Store = ( await import('electron-store') ).default;

该错误几乎是不言自明的,并提供了解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.