node.js - FS - 在 Webpack 5 上使用 FS 进行 Electron

标签 node.js vue.js webpack electron quasar-framework

我最近将我的 Quasar 框架升级到了 v2,它使用 Vue3、Electron 16 和 Webpack 5。

当我尝试运行我的应用程序时,我不断收到此错误:

Module not found: Can't resolve imported dependency "fs"

我知道 webpack 5 不会自动执行 polyfill,因此我将这些添加到我的 quasar.conf.js 中:

      chainWebpack (chain) {
        const nodePolyfillWebpackPlugin = require('node-polyfill-webpack-plugin')
        chain.plugin('node-polyfill').use(nodePolyfillWebpackPlugin)
      }

但这不支持 fs 模块的 polyfill。

当我尝试添加此内容时:

        if (!cfg.resolve.fallback) {
          cfg.resolve.fallback = {}
          cfg.resolve.fallback.fs = false
        }

现在我收到一个错误:

TypeError: fs.readFileSync is not a function

我也尝试将其添加到我的 package.json 中,相同的行为(如预期):

  "browser": {
    "fs": false
  }

但是……我如何在我的 Electron 应用程序中使用 fs

最佳答案

现在能弄清楚了。 将其添加到此处,以防将来有人需要它。我看到很多人问这个问题,但没有得到解决。

所以..我将其添加到 electro-preload.js 中,因为 fs/内置 Node 模块可以通过渲染器访问:

import { contextBridge } from 'electron'

const fs = require('fs')
contextBridge.exposeInMainWorld('electronFs', {
  readFileSync: fs.readFileSync,
  existsSync: fs.existsSync
  // Other fs methods here
})

并在 Vue/JS/模块中像这样使用它:

const fs = window.electronFs
const jsonContent = JSON.parse(fs.readFileSync(SOME_PATH))

关于node.js - FS - 在 Webpack 5 上使用 FS 进行 Electron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70284752/

相关文章:

javascript - 从 Node-JS 聆听/关注 IBM Cloud Object Storage 中的变化

reactjs - 无法读取未定义的属性 '@global' - NPM 链接 MUI 组件

javascript - bundle.js 而不是 React 组件上的控制台日志记录错误

javascript - V-不输出

node.js - 找不到模块 : Error: Cannot resolve module 'react-addons-test-utils'

node.js - 下划线中的 where() 未按预期工作

node.js - AWS-SES 电子邮件地址未验证。 Gmail 帐户

javascript - sh.exe": node: command not found

javascript - vuejs 从子组件更新父数据

vue.js - 如何处理Vue Router中的fragment GET参数?