Electron+vue项目中,启动web服务,报错index.js:7 Uncaught TypeError: fs.existsSync is not a function?
背景:接手了一个Electron+vue 的桌面端项目,基本上功能已经开发完毕,我只是处理些bug。
现来了一个需求,需要把这个桌面端项目切换成web网页。
只需要部分需求使用web端,然后领导就想web端和桌面端代码统一管理。
我在package.json里面看到有"serve": "vue-cli-service serve",直接执行命令,报错 getElectronPath 函数触发的,Uncaught TypeError fs.existsSync is not a function,通过报错,直接定位到node_modules,electron包里面的index。
本身web上面也访问不了fs,桌面端代码里面有很多与本地文件交互的,这该如何是好,难道要重新搭建框架吗,想问大家有没有解决办法?
node_modules,electron包里面的index.js:
const fs = require('fs');
const path = require('path');
const pathFile = path.join(__dirname, 'path.txt');
function getElectronPath () {
if (fs.existsSync(pathFile)) {
const executablePath = fs.readFileSync(pathFile, 'utf-8');
if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
return path.join(process.env.ELECTRON_OVERRIDE_DIST_PATH, executablePath);
}
return path.join(__dirname, 'dist', executablePath);
} else {
throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again');
}
}
console.log(getElectronPath(),"getElectronPath")
module.exports = getElectronPath();
package.json:
{
"name": "vcloud",
"version": "2025.5.0",
"private": true,
"main": "background.js",
"scripts": {
"build1": "node ./plugins/version.js && vue-cli-service electron:build && node ./plugins/buildMd5.js",
"build": "node ./plugins/version.js && vue-cli-service electron:build",
"dev": "vue-cli-service electron:serve",
"build:web": "vue-cli-service build",
"serve": "vue-cli-service serve",
"build:icon": "electron-icon-builder --input=./public/icon.png --output=build --flatten",
"postinstall": "electron-builder install-app-deps",
"postuninstall": "electron-builder install-app-deps",
"build:md5": "node ./plugins/buildMd5.js"
},
"dependencies": {
"@better-scroll/core": "^2.0.4",
"@types/node": "^22.10.5",
"@vue-office/docx": "^1.3.1",
"@vue-office/excel": "^1.4.7",
"@vue-office/pdf": "^1.5.5",
"assert-strict": "0.0.2",
"awe-dnd": "^0.3.4",
"axios": "^0.27.2",
"browserify": "^17.0.1",
"bytenode": "^1.1.7",
"core-js": "^3.6.5",
"cpy": "^8.1.1",
"crypto-js": "^4.0.0",
"del": "^6.0.0",
"dns": "^0.2.2",
"docx-preview": "^0.1.20",
"docx-to-html": "^1.0.1",
"electron-download": "^4.1.1",
"element-china-area-data": "^6.1.0",
"element-ui": "^2.13.2",
"find-process": "^1.4.3",
"fs-extra": "^9.0.1",
"globby": "^11.0.3",
"got": "^11.8.5",
"http2": "^3.3.7",
"iconv-lite": "^0.6.3",
"js-base64": "^3.6.0",
"js-file-download": "^0.4.12",
"jszip": "^3.10.1",
"log4js": "^6.9.1",
"md5-file": "^5.0.0",
"node-7z": "^3.0.0",
"node-cmd": "^5.0.0",
"node-rsa": "^1.1.1",
"phantomjs-prebuilt": "^2.1.16",
"postcss-px-to-viewport": "^1.1.1",
"pptxgenjs": "^3.12.0",
"qiniu-js": "^3.1.2",
"register-service-worker": "^1.7.1",
"request": "^2.88.2",
"request-progress": "^3.0.0",
"socket.io-client": "^2.0.3",
"swiper": "^6.8.4",
"video-player": "^0.0.1",
"vtip": "^1.0.6",
"vue": "^2.6.11",
"vue-awesome-swiper": "^4.1.1",
"vue-cropper": "^0.5.5",
"vue-demi": "^0.13.11",
"vue-office-preview": "^1.0.2",
"vue-pdf": "^4.3.0",
"vue-photo-preview": "^1.1.3",
"vue-qr": "^4.0.9",
"vue-router": "^3.4.8",
"vue-uuid": "^2.0.2",
"vue-video-player": "^5.0.2",
"vuex": "^3.4.0",
"vuex-electron": "^1.0.3",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~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",
"chalk": "^4.1.0",
"css-loader": "^5.0.0",
"electron": "^12.2.3",
"electron-debug": "^3.1.0",
"electron-devtools-installer": "^3.1.1",
"electron-icon-builder": "^1.0.2",
"postcss-loader": "^4.0.4",
"style-loader": "^2.0.0",
"stylus": "^0.54.8",
"stylus-loader": "^3.0.2",
"vue-cli-plugin-electron-builder": "~2.0.0",
"vue-devtools": "^5.1.4",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.11",
"webpack-bundle-analyzer": "^3.9.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
],
"__npminstall_done": false
}


