Javascript Electron.js/packet错误:fs.existsSync不是函数

Javascript Electron.js/packet错误:fs.existsSync不是函数,javascript,node.js,reactjs,electron,parceljs,Javascript,Node.js,Reactjs,Electron,Parceljs,我使用的是电子/包裹样板,它在开箱即用 但是,在使用该软件包时,我在electron JS控制台中遇到以下错误: Uncaught TypeError: fs.existsSync is not a function at getElectronPath (index.js:7) at Object.parcelRequire.node_modules/electron/index.js.fs (index.js:18) at newRequire (src.a2b276

我使用的是电子/包裹样板,它在开箱即用

但是,在使用该软件包时,我在electron JS控制台中遇到以下错误:

Uncaught TypeError: fs.existsSync is not a function
    at getElectronPath (index.js:7)
    at Object.parcelRequire.node_modules/electron/index.js.fs (index.js:18)
    at newRequire (src.a2b27638.js:47)
    at localRequire (src.a2b27638.js:53)
    at Object.parcelRequire.node_modules/electron-ga/lib/side-effects.js.electron (side-effects.ts:1)
    at newRequire (src.a2b27638.js:47)
    at localRequire (src.a2b27638.js:53)
    at Object.parcelRequire.node_modules/electron-ga/lib/helpers.js.qs (helpers.ts:4)
    at newRequire (src.a2b27638.js:47)
    at localRequire (src.a2b27638.js:53)
在我们运行
纱线开始的终端

[0] ⚠️  /Users/nyxynyx/electron-app/node_modules/electron/index.js:8:41: Cannot statically evaluate fs argument
[0]    6 | function getElectronPath () {
[0]    7 |   if (fs.existsSync(pathFile)) {
[0] >  8 |     var executablePath = fs.readFileSync(pathFile, 'utf-8')
[0]      |                                         ^
[0]    9 |     if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
[0]   10 |       return path.join(process.env.ELECTRON_OVERRIDE_DIST_PATH, executablePath)
[0]   11 |     }

我的直觉是,当使用
纱线启动
启动包裹时,包裹没有正确地对准电子,所以我试着更换

"react-start": "parcel -p 3000 index.html --out-dir build",

但现在,Electron应用程序甚至在运行
纱线启动时都不会启动,并且在运行
纱线启动后或
纱线反应启动后尝试加载时都不会显示任何内容

为什么它不工作?是否有可能解决此错误

谢谢大家!


GitHub回购协议


使用

  • 反应-dom@16.13.1
  • 反应-redux@7.2.0
  • react@16.13.1
  • 雷杜信标-electron@1.0.1
  • redux@4.0.5
  • electron@8.2.3
  • 包裹-bundler@1.12.4
packages.json

{
  "name": "electron-react-parcel",
  "version": "1.0.0",
  "description": "Electron app build using ReactJS and Parcel web application bundler",
  "main": "src/electron.js",
  "scripts": {
    "react-start": "parcel -p 3000 index.html --out-dir build",
    "react-build": "parcel build index.html --out-dir build --public-url ./",
    "electron-build": "electron-builder -mwl",
    "clean-build": "rm -rf build/ .cache dist/",
    "build": "yarn clean-build && yarn react-build && yarn electron-build",
    "start": "concurrently \"cross-env BROWSER=none yarn react-start\" \"wait-on http://localhost:3000 && electron . \"",

...

nodeIntegration:true
尝试按照@tpikachu的建议将设置为
true
,但相同的错误仍然存在

electron.js(通常命名为
main.js


由于包版本冲突。比如
electron-ga@1.0.6具有electron@^1.8.2

甚至我们也使用electron解决了包冲突-ga@1.0.6不稳定,不适合最新的电子版本


我们可以使用而不是
electron ga

您在哪里使用这个节点模块,redux beacon electron?渲染器或Main@tpikachu在渲染器中,有一个React/Redux应用程序。然后请在创建
BrowserWindow
时启用
nodeIntegration
标志,这样您就可以使用此
electron google analytics
而不是
electron ga
"react-start": "parcel -p 3000 index.html --out-dir build --target electron",
{
  "name": "electron-react-parcel",
  "version": "1.0.0",
  "description": "Electron app build using ReactJS and Parcel web application bundler",
  "main": "src/electron.js",
  "scripts": {
    "react-start": "parcel -p 3000 index.html --out-dir build",
    "react-build": "parcel build index.html --out-dir build --public-url ./",
    "electron-build": "electron-builder -mwl",
    "clean-build": "rm -rf build/ .cache dist/",
    "build": "yarn clean-build && yarn react-build && yarn electron-build",
    "start": "concurrently \"cross-env BROWSER=none yarn react-start\" \"wait-on http://localhost:3000 && electron . \"",

...
function createWindow() {
  const { width, height } = electron.screen.getPrimaryDisplay().workAreaSize;
  mainWindow = new BrowserWindow({
    width: Math.round(width * 0.9),
    height: Math.round(height * 0.9),
    webPreferences: {
      nodeIntegration: true,
    }
  });

  mainWindow.loadURL(
    isDev
      ? "http://localhost:3000"
      : `file://${path.join(__dirname, "../build/index.html")}`
  );
  mainWindow.on("closed", () => (mainWindow = null));
}


app.on("ready", async () => {
  createWindow();

  ...

});