【问题标题】:Using keytar inside electron with angular在带角度的电子内部使用keytar
【发布时间】:2020-11-11 23:43:31
【问题描述】:

我需要将 keytar 与电子一起使用,但我使用的是 Angular 和 Typescript。 我已经在 main.ts 中导入了模块

import * as keytar from 'keytar';

但加载失败。

或者,在一个模块中,我正在使用 import * as keytar from '../../../node_modules/keytar';

但 Electron 在开发控制台中返回此错误

未捕获的错误:节点加载器:错误:无效的包 /home/project/angularelectron/node_modules/electron/dist/resources/electron.asar 在对象。 (keytar.node:5) 在 Object../node_modules/keytar/build/Release/keytar.node (keytar.node:6) 在 webpack_require (bootstrap:79) 在 Object../node_modules/keytar/lib/keytar.js (keytar.js:1) 在 webpack_require (bootstrap:79) 在 Module../src/app/home/home.component.ts (main.js:4089) 在 webpack_require (bootstrap:79) 在 Module../src/app/home/home-routing.module.ts (detail.module.ts:13) 在 webpack_require (bootstrap:79) 在模块../src/app/app-routing.module.ts

如何正确加载 keytar? 谢谢你

【问题讨论】:

    标签: node.js angular webpack electron keytar


    【解决方案1】:

    首先,请不要使用远程模块,因为它已被弃用是有原因的。

    我刚刚遇到了同样的问题,并设法通过一些修补来解决它。

    由于 keytar 是一个节点模块,具有与电子渲染器进程一起使用的本机依赖项,​​因此需要跳过几个环节。 确保在创建浏览器窗口时将 nodeIntegration 设置为 true,并将 contextIsolation 设置为 false。在早期版本中,设置 nodeIntegration 就足够了,但现在已经不行了。

    然后要将它与 angular 一起使用,还有其他步骤。您必须使用 @angular-builders/custom-webpack 和 node-loader。然后在您的组件或服务中将 keytar 导入为import * as keytar from "keytar"; 并在您的组件定义中声明private keytar: typeof keytar;。 现在这是重要的一点:在您的构造函数中this.keytar = window.require("keytar"); 你必须使用电子的 require 函数,否则你会得到问题中的错误。顶部的标准导入将为您提供输入信息。

    【讨论】:

    【解决方案2】:

    我在使用 Vue 和 Electron 时遇到了同样的问题。所以问题在于在渲染器进程中使用keytar,您无法如此轻松地访问本机api。

    const keytar = require("electron").remote.require("keytar");
    

    在我的组件中使用这样的 keytar 解决了问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-30
      • 2018-11-23
      • 2018-06-01
      • 2021-09-30
      • 2020-04-12
      • 2016-09-21
      • 2018-08-28
      • 2021-08-11
      相关资源
      最近更新 更多