文档
如果您检查本电子安装手册,您可以看到您应该以这样的方式安装电子:
npm install electron --save-dev
所以我就做了。但是如果你检查一下这个其他文件,他们会说:
当使用电子内置模块时,可能会遇到如下错误:require('electron').webFrame.setZoomFactor(1.0) Uncaught :无法读取未定义的属性“setZoomLevel” 这是因为npm电子模块是在本地或全球安装的,它超越了电子的内置模块。
我不知道“本地”是否意味着这样(没有--save-dev
):
npm install electron
分解电子
若要检查安装是否正确:
要验证是否使用正确的内置模块,可以打印电子模块的路径: Console.log(require.resolve(电子)) 然后检查它是否以下列形式出现: "/path/to/Electron.app/Contents/Resources/atom.asar/renderer/api/lib/exports/electron.js“ 如果它类似于node_ module / npm /index.js,那么您必须移除npm电子模块,或者重命名它。
我的申请结果是
...\app_folder\node_modules\electron\dist\resources\electron.asar\browser\api\exports\electron.js
问题
我可以从main.js
文件访问电子对象。这一切都很好:
const {app} = require('electron');
但是,如果我在其他js文件中这样做(我需要从main.js获得这些文件),我就会得到一个未定义的值。这是正常的吗?我是否需要将电子对象作为参数发送到这些其他模块?
他们也这么说,但我要考虑的是:
但是,如果您使用的是内置模块,但仍然存在此错误,则很可能您在错误的过程中使用了该模块。例如,electron.app只能在主进程中使用,而electron.webFrame只能在呈现程序进程中使用。
这是最新的文档吗?我应该如何安装电子使工作的内置模块?
具体问题(最新情况)
实际上,如果我在另一个模块做了
const electron = require('electron');
console.log(electron)
console.log(electron.app)
物品打印如下:
{ clipboard: [Getter],
crashReporter: [Getter],
nativeImage: [Getter],
shell: [Getter],
app: [Getter],
autoUpdater: [Getter],
BrowserView: [Getter],
BrowserWindow: [Getter],
contentTracing: [Getter],
dialog: [Getter],
globalShortcut: [Getter],
ipcMain: [Getter],
inAppPurchase: [Getter],
Menu: [Getter],
MenuItem: [Getter],
net: [Getter],
netLog: [Getter],
Notification: [Getter],
powerMonitor: [Getter],
powerSaveBlocker: [Getter],
protocol: [Getter],
screen: [Getter],
session: [Getter],
systemPreferences: [Getter],
TopLevelWindow: [Getter],
TouchBar: [Getter],
Tray: [Getter],
View: [Getter],
webContents: [Getter],
WebContentsView: [Getter] }
App {
_events:
{ login: [Function],
'certificate-error': [Function],
'select-client-certificate': [Function],
quit: [Function],
'web-contents-created': [Function],
'session-created': [Function],
'will-quit': [Function],
ready: [ [Function], [Function] ],
'window-all-closed': [Function] },
_eventsCount: 9,
_maxListeners: undefined,
whenReady: [Function: whenReady],
setApplicationMenu: [Function: setApplicationMenu],
getApplicationMenu: [Function: getApplicationMenu],
commandLine:
{ appendSwitch: [Function: appendSwitch],
appendArgument: [Function: appendArgument] },
getAppMetrics: [Function],
isPackaged: false,
allowNTLMCredentialsForAllDomains: [Function],
releaseSingleInstance: [Function],
makeSingleInstance: [Function] }
但是如果我试图获取用户数据路径
const __user_data = electron.app.getPath('userData');
我知道这个错误:
Cannot read property 'getPath' of undefined
我想知道为什么会出现这种情况,因为应用程序存在,但是如果我运行app.getPath()
应用程序就不存在了。类似的事情发生在electron.remote
上,我也尝试过了,甚至在主要过程中也是如此。
发布于 2018-11-12 17:30:58
除了对安装路径的怀疑外,我还解决了这个问题。在我的应用程序中,我需要来自不同地方的文件。有时,我从主进程调用它,在其他情况下,从渲染程序过程调用它。所以我不得不这么做来支持这两种情况:
var app = null;
if (typeof(electron.remote) !== 'undefined') {
app = electron.remote.app;
} else {
app = electron.app
}
const __user_data = app.getPath('userData');
https://stackoverflow.com/questions/53231159
复制相似问题