我正在使用electron-builder(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。当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
我一定是在构建过程中遗漏了一个步骤。
3条答案
按热度按时间iezvtpos1#
事实证明,我在渲染器进程中使用了keytar,我把keytar移到了主进程中(它不经过Webpack / Babel),并被electron-builder正确打包。
main.js
然后从渲染器进程调用
或
gkl3eglg2#
因为您正在使用渲染器进程,并且希望使用来自系统或主进程的本机API。
c7rzv4ha3#
更新日期:
我发现(根据OP),转换我的主线程代码(使用keytar)导致调用返回
TypeError: keytar.findPassword is not a function
的keytar函数。我不得不使用
webpack-asset-relocator-loader
来成功地捆绑keytar:将以下规则添加到webpack.config.js中:
在此Github问题中找到解决方案。
下面的信息仍然代表在您的Webpack构建中包含二进制资源。
如果您必须转换需要二进制文件的代码,您可以将
file-loader
添加到您的webpack配置中。安装
npm i -D file-loader
或
yarn add -D file-loader
Webpack配置(包括一个
.dat
文件)如果要保留文件名,可以将
name
选项传递给加载器:有关
file-loader
Github repo的更多信息。