2017-04-05 13 views
4

keytar (3.0.2)를 포함하는 전자 애플리케이션을 전자 의존성으로 패키징하기 위해 전자 빌더 (16.6.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 

빌드 프로세스에서 단계가 누락되어 있어야합니다.

답변

2

결국 렌더러 프로세스에서 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);