在电子构建器中检索或指定输出文件名

时间:2016-11-11 13:51:08

标签: javascript node.js electron 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文件设置中将它拼凑在一起,但我宁愿它更明确。

2 个答案:

答案 0 :(得分:11)

您可以使用artifactName的{​​{1}}部分中的build指定输出文件名。

文档说artifact file name template支持package.json宏:

  除了file macros之外,还支持

$ {ext}。

文件宏

  

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

     

${ext} - 已扩展为${arch}ia32。如果没有拱形,宏将从带有前导空格的图案中移除, - 和_(因此,您不必担心并且可以重复使用模式)。
  x64 - 根据目标平台扩展到mac,linux或win   ${os} - package.json名称。
  ${name} - 消毒产品名称   ${productName} - 来自package.json
  ${version} - 从版本中检测到的预发布组件(例如beta)   ${channel} - 任何环境变量。
  AppInfo的任何属性(例如buildVersion,buildNumber)。

实施例

${env.ENV_NAME}

如果您的软件包版本是1.0.0,则会输出Windows目标:

"build": { "appId": "com.electron.app.my", "artifactName": "node-app-${version}.${ext}", ... },

答案 1 :(得分:1)

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