首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电子内置模块和安装npm的模块之间有什么区别吗?如何从其他模块访问电子对象?

电子内置模块和安装npm的模块之间有什么区别吗?如何从其他模块访问电子对象?
EN

Stack Overflow用户
提问于 2018-11-09 18:06:25
回答 1查看 851关注 0票数 4

文档

如果您检查本电子安装手册,您可以看到您应该以这样的方式安装电子:

代码语言:javascript
运行
复制
npm install electron --save-dev

所以我就做了。但是如果你检查一下这个其他文件,他们会说:

当使用电子内置模块时,可能会遇到如下错误:require('electron').webFrame.setZoomFactor(1.0) Uncaught :无法读取未定义的属性“setZoomLevel” 这是因为npm电子模块是在本地或全球安装的,它超越了电子的内置模块。

我不知道“本地”是否意味着这样(没有--save-dev):

代码语言:javascript
运行
复制
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电子模块,或者重命名它。

我的申请结果是

代码语言:javascript
运行
复制
...\app_folder\node_modules\electron\dist\resources\electron.asar\browser\api\exports\electron.js

问题

我可以从main.js文件访问电子对象。这一切都很好:

代码语言:javascript
运行
复制
const {app} = require('electron');

但是,如果我在其他js文件中这样做(我需要从main.js获得这些文件),我就会得到一个未定义的值。这是正常的吗?我是否需要将电子对象作为参数发送到这些其他模块?

他们也这么说,但我要考虑的是:

但是,如果您使用的是内置模块,但仍然存在此错误,则很可能您在错误的过程中使用了该模块。例如,electron.app只能在主进程中使用,而electron.webFrame只能在呈现程序进程中使用。

这是最新的文档吗?我应该如何安装电子使工作的内置模块?

具体问题(最新情况)

实际上,如果我在另一个模块做了

代码语言:javascript
运行
复制
const electron = require('electron');
console.log(electron)
console.log(electron.app)

物品打印如下:

代码语言:javascript
运行
复制
{ 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] }

但是如果我试图获取用户数据路径

代码语言:javascript
运行
复制
const __user_data = electron.app.getPath('userData');

我知道这个错误:

代码语言:javascript
运行
复制
Cannot read property 'getPath' of undefined

我想知道为什么会出现这种情况,因为应用程序存在,但是如果我运行app.getPath()应用程序就不存在了。类似的事情发生在electron.remote上,我也尝试过了,甚至在主要过程中也是如此。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-12 17:30:58

除了对安装路径的怀疑外,我还解决了这个问题。在我的应用程序中,我需要来自不同地方的文件。有时,我从主进程调用它,在其他情况下,从渲染程序过程调用它。所以我不得不这么做来支持这两种情况:

代码语言:javascript
运行
复制
var app = null;
if (typeof(electron.remote) !== 'undefined') {
    app = electron.remote.app;
} else {
    app = electron.app
}
const __user_data = app.getPath('userData');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53231159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档