在电子生成器中检索或指定输出文件名
Posted
技术标签:
【中文标题】在电子生成器中检索或指定输出文件名【英文标题】:Retrieve or Specify output file name in electron-builder 【发布时间】:2017-03-25 18:27:35 【问题描述】:我正在使用 electron-builder 以编程方式生成安装包。到目前为止,我将它作为我的实用程序来为当前操作系统类型创建安装包:
const packagejson = require("../package.json");
const builder = require("electron-builder");
const Platform = builder.Platform;
function buildPromise()
//Development package.json
const devMetadata = packagejson.electronBuilder;
//Application package.json
const appMetadata =
name: packagejson.name,
version: packagejson.version,
description: packagejson.description,
author: packagejson.author,
productName: packagejson.productName
;
//Build for the current target and send back promise
return builder.build(
projectDir: "./",
devMetadata,
appMetadata
);
module.exports =
buildPromise,
outputPath : packagejson.electronBuilder.directories.output
;
它的作用是从包含此部分的应用程序 MAIN package.json
文件中提取所需的元数据(因此应用程序 package.json
为空):
...
"electronBuilder":
"build":
"productName": "Node App",
"appId": "my.id",
"asar": false,
"win":
"iconUrl": "http://localhost:5000/images/logo-multi.ico",
"target": "nsis"
,
"nsis" :
"oneClick": false
,
"directories":
"output": "electron/output",
"app":"electron/app",
"buildResources": "electron/buildResources"
...
当我在 Windows 中运行构建时,我会得到一个名为 Node App Setup 1.0.0.exe
的文件。到此为止吧。但是我如何实际控制最终文件名?或者至少以编程方式检索该文件名,以便我可以将其读入并以某种方式响应客户端?显然,我可以将它从 json 文件设置中拼凑起来,但我希望它更明确。
【问题讨论】:
【参考方案1】:您可以在package.json
的build
部分中使用artifactName
指定输出文件名。
文档说artifact file name template 支持$ext
宏:
除了file macros,还支持$ext宏。
文件宏
您可以在文件模式、工件文件名模式和发布配置 url 中使用宏:
$arch
— 扩展为ia32
、x64
。如果没有拱门,宏将从您的模式中删除,前导空格,- 和 _(因此,您无需担心,可以重复使用模式)。$os
— 根据扩展为 mac、linux 或 win目标平台。$name
- package.json 名称。$productName
- 已清理的产品名称。$version
- 来自 package.json$channel
- 从版本 (例如 beta)。$env.ENV_NAME
— 任何环境变量。 AppInfo 的任何属性(例如 buildVersion、buildNumber)。
示例
"build":
"appId": "com.electron.app.my",
"artifactName": "node-app-$version.$ext",
...
,
如果您的软件包版本是 1.0.0,Windows 目标将输出:
node-app-1.0.0.exe
【讨论】:
【参考方案2】:应我的要求,作者将其添加到当前版本(8.5.1):
https://github.com/electron-userland/electron-builder/issues/899
所以现在我们可以这样做了:
builder.build()
.then(paths =>
//paths contains an array of export file paths, e.g.:
console.log(paths[0]); //= c:/MyProject/dist/My Project Setup 1.0.0.exe
console.log(paths[1]); //= c:/MyProject/dist/myproject-1.0.0-x86_64.AppImage
);
【讨论】:
以上是关于在电子生成器中检索或指定输出文件名的主要内容,如果未能解决你的问题,请参考以下文章