我尝试从typescript中的电子获取ipcRenderer模块,以便将当前组件的信息发送到核心并将信息返回到窗口(electron-chromium-browser)。 我得到的只是一个错误"未找到模块"通过将ts代码转码为ES5。
const ipc = require(' electron')。ipcRenderer;`
更新:错误正在"未找到模块"之间切换这一个:
ERROR in ./~/electron/index.js
Module build failed: Error: ENOENT, open '/.../node_modules/electron/index.js'
@ ./app/components/search/search.ts 12:10-29
那是来自当前的electron-api。我也尝试使用typescript中的import语法,但结果是一样的。
我尝试在ES5文件中使用electron.ipcRenderer模块,直接在html文件中加载/链接。
它有效。为什么呢?
答案 0 :(得分:4)
解决了问题。 问题是webpack-transcoder。
https://github.com/chentsulin/webpack-target-electron-renderer
https://github.com/chentsulin/electron-react-boilerplate/blob/master/webpack.config.development.js
答案 1 :(得分:2)
由于浏览器应用程序中的电子依赖性不是真实的,这意味着它不是从node_modules进行webpacked而是在运行时加载,因此require语句会导致错误,例如" fs"找不到我。
但是你可以用这个来欺骗打字稿:
if (typeof window['require'] !== "undefined") {
let electron = window['require']("electron");
let ipcRenderer = electron.ipcRenderer;
console.log("ipc renderer", ipcRenderer);
}
此外,如果您正在编写一个网络应用程序,只有当它在内部运行时才通过电子增强,这是一种更好的方法,因为您不必将电子作为依赖项添加到您的网络应用程序中使用通讯部件时。
答案 2 :(得分:1)
我尝试在ES5文件中使用electron.ipcRenderer模块,直接在html文件中加载/链接。
如果它在 html 中有效,但在 ts 中失败,则表示该错误不在const ipc = require('electron').ipcRenderer;
中。导入中的错误非常类似于您必须从html(而不是require('electron')
)加载您的文件。
答案 3 :(得分:0)
这为我解决了问题:
您可以修复它,只需添加到“ package.json”
"browser": {
"fs": false,
"path": false,
"os": false }
来源:https://github.com/angular/angular-cli/issues/8272#issuecomment-392777980
答案 4 :(得分:0)
你可以用这个来欺骗 ts(肮脏的黑客,但它有效):
const { ipcRenderer } = (window as any).require("electron");