我正在尝试使用 electro-forge 打包我的电子应用程序。为了使应用程序在 Mac 上可用,我需要对应用程序进行协同设计,这需要在 package.json 文件中传递 appleId 和应用程序特定密码等信息。
我如何安全地传递这些信息?(即下载应用程序的人无法使用)
如果环境变量是可行的方法,我希望了解在哪里设置环境变量(在单独的文件中?在启动命令中?)以及如何在 package.json 本身中访问它们。
如果有任何帮助来解决这个问题,我将不胜感激。
我考虑过的细节:
-Electron Forge codesign 文档 没有提及如何以安全的方式实际提供 osx 所需的详细信息。它确实提到它在底层使用了电子公证(以及其他),并且电子公证的文档说:“永远不要将密码硬编码到打包脚本中,至少使用环境变量”,但没有提供有关如何执行此操作的详细信息。
-此堆栈溢出answer提供了有关设置单独的
forge.config.js
文件的有用信息,然后说您应该“使用process.env.YOUR_VARIABLE_NAME加载环境变量”。它没有提供更多细节——加载打包应用程序的环境变量是我在这里试图弄清楚的。
--这个堆栈溢出answer提到手动设置它们,但没有提到如何设置。它还提到使用 dotenv 包——但令我惊讶的是,此任务需要一个单独的包,这对于任何 mac 电子应用程序来说都是基础。
我将它们存储在项目目录中的
.env
文件中,如下所示:
APPLEID=your_id
APPLEIDPASS=your_password
在
package.json
我有一个部分:
"build": {
"productName": "PRODUCT",
"appId": "your app id",
"copyright": "Copyright",
"directories": {
"output": "build"
},
"afterSign": "scripts/notarize.js",
afterSign
指向脚本scripts/notarize.js
,它将使用APPLEID
拉出APPLEIDPASS
和dotenv
:
require('dotenv').config()
const { notarize } = require('electron-notarize')
exports.default = async function notarizing(context) {
const { electronPlatformName, appOutDir } = context
if (electronPlatformName !== 'darwin') {
return
}
const appName = context.packager.appInfo.productFilename;
return await notarize({
appBundleId: 'your app id',
appPath: `${appOutDir}/${appName}.app`,
appleId: process.env.APPLEID,
appleIdPassword: process.env.APPLEIDPASS
})
}
最后两行
appleId
和 appleIdPassword
提取了环境变量。
切勿将
.env
文件提交到 github 等地方。为了确保:将 .env
添加到您的 .gitignore
文件中。另外:script/notarize.js
应用程序不是您应用程序本身的一部分,它在您构建应用程序时运行。
我已经收到了一位 Electron Forge 维护者的回复,他说这样做的方法是:
在构建脚本本身中加载环境变量。例如:
$ VAR1=something VAR2=somethingelse npm run make
。
然后,在 package.json 引用的 forge.config.js 文件中适当引用这些变量。参考语法示例:
process.env.VAR1
您可以在
forge.config.ts
文件中注明。
const { utils: { fromBuildIdentifier } } = require('@electron-forge/core');
module.exports = {
buildIdentifier: process.env.IS_BETA ? 'beta' : 'prod',
packagerConfig: {
appBundleId: fromBuildIdentifier({ beta: 'com.beta.app', prod: 'com.app' })
}
};
本文档会很有帮助:https://www.electronforge.io/config/configuration#build-identifiers