检索或指定电子生成器中的输出文件名

Retrieve or Specify output file name in electron-builder

本文关键字:输出 文件名 检索      更新时间:2023-09-26

我正在以编程方式使用electronic -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文件设置中拼凑出来,但我希望它更明确。

您可以在package.jsonbuild部分使用artifactName指定输出文件名。

文档说工件文件名模板支持${ext}宏:

除了文件宏之外,还支持${ext}宏。

文件宏

您可以在文件模式、工件文件名模式和发布配置url中使用宏:

${arch} -扩展到ia32, x64。如果没有arch,宏将会从你的模式中移除,并带有前导空格,-和_(所以,你不需要担心,可以重用模式)。
${os} -根据目标平台扩展到mac, linux或win。
${name} - package。json的名字。
${productName} -消毒产品名称。
${version} - from 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

应我的要求,作者将其添加到当前版本(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
    });