包装Keytar与电子应用程序

我正在使用电子构build器(16.6.2)来封装我的电子应用程序,其中包括keytar(3.0.2)作为prod依赖项。

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。 当build立keytar时,它包含了一个我的系统的完全合格的path。 我在控制台中得到以下错误:

 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 

我必须错过构build过程中的一个步骤。

事实certificate,我在渲染过程中使用keytar。 我把keytar移到了主进程(不通过Webpack / Babel),并被电子制造商正确地包装。

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);