首页 > 解决方案 > 使用电子 ipc 时停止的电子锻造符合渲染器代码

问题描述

我正在创建一个新的电子应用程序,但我遇到了一个我从未遇到过的问题

我使用import {ipcRenderer} from 'electron'并使用过ipcRenderer.send,它在编译渲染器代码时显示此错误。

在最新的电子和电子锻造中,导入电子并在任何渲染器代码中使用它都会导致错误并终止

我在electron中使用React,我之前的项目也使用了React+Electron,但是使用electron模块是可以的。

我能做的所有事情都不起作用,包括降级电子包。

完整日志:

yarn run v1.22.10
$ electron-forge start
√ Checking your system
√ Locating Application
√ Preparing native dependencies
√ Compiling Main Process Code
√ Launch Dev Servers
√ Compiling Preload Scripts
√ Launching Application


Webpack Output Available: http://localhost:9000


\ Compiling Renderer Code

An unhandled rejection has occurred inside Forge:
[Error: EISDIR: illegal operation on a directory, read] {
  errno: -4068,
  code: 'EISDIR',
  syscall: 'read'
}

Electron Forge was terminated. Location:
{}
error Command failed with exit code 1.

我尝试重新安装所有软件包,但它不起作用。为什么以及如何解决?即使我在target: 'node'webpack.renderer.config.json 中添加了一个,哦窗口终于可以显示了,但是 ipcRender 不能发送消息

Uncaught TypeError: Cannot read property 'send' of undefined
    at onClick (TitleBar.tsx?3219:11)
    at HTMLUnknownElement.callCallback (react-dom.development.js?6ac8:3945)
    at Object.invokeGuardedCallbackDev (react-dom.development.js?6ac8:3994)
    at invokeGuardedCallback (react-dom.development.js?6ac8:4056)
    at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js?6ac8:4070)
    at executeDispatch (react-dom.development.js?6ac8:8243)
    at processDispatchQueueItemsInOrder (react-dom.development.js?6ac8:8275)
    at processDispatchQueue (react-dom.development.js?6ac8:8288)
    at dispatchEventsForPlugins (react-dom.development.js?6ac8:8299)
    at eval (react-dom.development.js?6ac8:8508)

为什么????

标签: webpackelectronelectron-forge

解决方案


tl;博士

让 webpack 明白 electron 应该使用require直接导入。

解决方案

这是一个 webpack 问题。

Webpack 会将所有使用过的包打包成 bundle。因为 electron 是一个超酷的包,webpack不能把它做成 bundle。

像这样配置使 electron 成为 commonjs2 模块,使语句 fromimport electron from 'electron直接require('electron')从 electron 中获取项目。

// webpack.renderer.config.js
module.exports = {
  externals: {
    electron: 'commonjs2 electron',
  },
}

推荐阅读