'Uncaught (in promise) TypeError: fs.readdirSync is not a function vue + electron

I'm using vue cli and builded electron inside. Here is my package.json

{
  "name": "rule-the-world",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "electron:build": "vue-cli-service electron:build",
    "electron:serve": "vue-cli-service electron:serve",
    "postinstall": "electron-builder install-app-deps",
    "postuninstall": "electron-builder install-app-deps"
  },
  "main": "background.js",
  "dependencies": {
    "core-js": "^3.6.5",
    "fs": "^0.0.1-security",
    "globe.gl": "^2.23.0",
    "json-loader": "^0.5.7",
    "register-service-worker": "^1.7.1",
    "vue": "^3.0.0",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-pwa": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "babel-eslint": "^10.1.0",
    "electron": "^16.0.5",
    "electron-devtools-installer": "^3.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^7.0.0",
    "sass": "^1.26.5",
    "sass-loader": "^8.0.2",
    "vue-cli-plugin-electron-builder": "~2.1.1"
  }
}

and when I try to use fs in electron window I got an error like "Uncaught (in promise) TypeError: fs.readdirSync", here is my code

const fs = require('fs')

function getFiles(__dirname) {
  let filenames = fs.readdirSync(__dirname);
  let files = [];
  filenames.forEach((file) => {
    let _file = new Object();

    let data = fs.readFileSync(`${__dirname}/${file}`, {
      encoding: "utf8",
      flag: "r",
    });
    let parseData = JSON.parse(data);

    _file.name = parseData.name;
    _file.folderName = file;
    _file.saveDate = parseData.saveDate;
    _file.player = new Object();

    _file.player.name = parseData.result.inGame.player.name;
    _file.player.familyName = parseData.result.inGame.player.familyName;
    _file.player.flag = parseData.result.inGame.player.flag;
    _file.player.culture = parseData.result.inGame.player.family.culture;

    files.push(_file);
  });

  // Display the file data

  return files;
}

And this code was working few months ago, I don't remember what did I changed lastly or did I. It's basically getting save files system for my electron,vue game. I look for a lot of solutions but couldn't find one to work, anyone knew this?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source