Получение или указание имени выходного файла в electron-builder
Я работаю с 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
};
То, что он делает, это вытягивает необходимые метаданные из главного файла приложения 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, но я бы предпочел, чтобы это было более определенно.
2 ответа:
Вы можете указать выходное имя файла, используя
artifactName
в разделеbuild
Вашегоpackage.json
.В документах говорится, что шаблон имени файла артефакта поддерживает макрос
${ext}
:МакросФайловые Макросы
Вы можете использовать макросы в шаблонах файлов, шаблонах имен файлов артефактов и url-адресе конфигурации публикации:
${arch}
- расширено доia32
,x64
. Если нет арки, макрос будет удален из вашего шаблона с ведущим пространством, - и _ (таким образом, вам не нужно беспокоиться и можно повторно использовать шаблон).${os}
- расширен до mac, linux или win в соответствии с целевой платформой.${name}
– пакет.имя json.${productName}
- Санированное название продукта.${version}
- из пакета.json${channel}
- обнаружен пререлизный компонент из версии (например, бета-версия).${env.ENV_NAME}
- любая переменная окружения.
Любое свойство AppInfo (например, buildVersion, номер_сборки).Пример
"build": { "appId": "com.electron.app.my", "artifactName": "node-app-${version}.${ext}", ... },
Если ваша версия пакета 1.0.0, целевой объект Windows выведет:
node-app-1.0.0.exe
По моей просьбе автор добавил его в текущую версию (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 });