我正在使用electronic-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 正确打包。
main.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/