node.js - 使用 Electron 应用程序打包 Keytar

标签 node.js electron electron-builder electron-packager

我正在使用 electron-builder (16.6.2) 打包我的 Electron 应用程序,其中包括 keytar (3.0.2) 作为产品依赖项。

package.json 文件包括:

"scripts": {
    "postinstall": "install-app-deps",
    "compile:dev": "webpack-dev-server --hot --host 0.0.0.0 --config=./webpack.dev.config.js",
    "compile": "webpack --config webpack.build.config.js",
    "dist": "yarn compile && build"
},
"build": {
    "appId": "com.myproject",
    "asar": true,
    "files": [
      "bin",
      "node_modules",
      "main.js"
    ]
}

当我在同一系统上运行 .app 时,它运行良好。当我尝试在不同的系统上运行它(或删除我的 node_modules)时,它找不到 keytar.node。构建 keytar 时,它包含我的系统的该镜像的完全限定路径。我在控制台中收到以下错误:

Uncaught Error: Cannot open /Users/Kevin/Work/myproject/node_modules/keytar/build/Release/keytar.node
Error: dlopen(/Users/Kevin/Work/myproject/node_modules/keytar/build/Release/keytar.node, 
1): image not found

我一定是在构建过程中遗漏了一个步骤。

最佳答案

事实证明,我在渲染器进程中使用了 keytar。我将 keytar 移入主进程(不通过 Webpack/Babel)并由 electron-builder 正确打包。

主要.js

ipcMain.on('get-password', (event, user) => {
    event.returnValue = keytar.getPassword('ServiceName', user);
});

ipcMain.on('set-password', (event, user, pass) => {
    event.returnValue = keytar.replacePassword('ServiceName', user, pass);
});

然后我可以从渲染器进程中调用

const password = ipcRenderer.sendSync('get-password', user);

ipcRenderer.sendSync('set-password', user, pass);

关于node.js - 使用 Electron 应用程序打包 Keytar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43234059/

相关文章:

c# - 无法在 Electron 应用程序中使用 Discord OAuth2

javascript - promise 解决未定义,但数据仍已过帐

electron - 发布 Electron 应用程序失败,出现: Error!! TypeError:无法读取null的 'provider'属性

raspberry-pi - electron-builder 输出错误: Compressor “xz” is not supported

javascript - Node-Webkit 应用程序 : Loading thousands of images from disk

javascript - 带有 Node.js 和 parse.com 后端的 AngularJS SPA

reactjs - 如何使用 Electron react 样板正确设置 Material 用户界面

node.js - Node JS 将变量传递给 Jade/Pug

node.js - 在 node-soap 中,如何查看/调试生成的 XML SOAP 请求?

linux - 构建 Electron linux 发行版 : The SUID sandbox helper binary was found, 但未正确配置