fs.existsSync 在电子中使用时不是函数

Posted

技术标签:

【中文标题】fs.existsSync 在电子中使用时不是函数【英文标题】:fs.existsSync is not a function when used in electron 【发布时间】:2020-11-25 21:19:39 【问题描述】:

我正在使用Angular 10Electron 10.0electron-builder v22.8.0

启动我的 Electron 应用程序时,我在控制台中收到以下错误:

fs.existsSync is not a function when used in electron
    getElectronPath @ ./node_modules/events/events.js:6
    <anonymous> @ ./node_modules/events/events.js:17
    ./node_modules/electron/index.js @ ./node_modules/events/events.js:19
    __webpack_require__ @ ./webpack/bootstrap:79
    ./src/app/projectview/new/new.component.ts @ ./src/app/projectview/new/new.component.ts:1
    [...]
    at __webpack_require__ (bootstrap: 79)

这里弹出错误:

当我导入电子并在我的渲染器进程中有以下行时会发生这种情况:

import  remote  from 'electron';

// later on in my component:
remote.dialog.showOpenDialog(...);

nodeIntegration 在创建BrowserWindow 时是true

   [...]
   win = new BrowserWindow(
      webPreferences: 
          webSecurity: false,
          nodeIntegrationInWorker: true,
          nodeIntegration: true,
          allowRunningInsecureContent: (serve) ? true : false,
    ,

我浏览了整个 ***,但找不到任何我没有尝试过的解决方案。谁能帮帮我?

【问题讨论】:

你能验证你webpack.config中的目标是electron-renderer吗? 这能回答你的问题吗? How to resolve fs.existsSync is not a function @JakeHolzinger 然后编译但失败,Cannot read property 'dialog' of undefined 【参考方案1】:

所以根据你的句子It happens when I import electron and have the following line in my renderer process: import remote from 'electron';

在电子 10 中是远程 api 的重大更改。 webpreference "enableRemoteModule" 现在默认为 false。

激活模块并再次测试:

const w = new BrowserWindow(
    webPreferences: 
        enableRemoteModule: true
    
)

here you find all breaking changes

查看推荐的 ipcRenderer 使用方式:use ipcRenderer and not remote

【讨论】:

以上是关于fs.existsSync 在电子中使用时不是函数的主要内容,如果未能解决你的问题,请参考以下文章

Browserify / Electron / AngularJS 错误:fs.existsSync 不是函数

TypeError:fs.​​existsSync 不是函数(Electron/ReactJS/Typescript)

fs.exists 和 fs.existsSync 之间的区别

使用 fs.existsSync ...我无法将输出设为 true ...(已编辑)

检查 Gulp 中是不是存在文件

nodejs_fs模块相关练习1