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

Ern*_*e S 5 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
};
Run Code Online (Sandbox Code Playgroud)

它的作用是从package.json包含此部分的应用程序MAIN 文件中提取所需的元数据(因此应用程序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"
    }
  }
  ...
Run Code Online (Sandbox Code Playgroud)

当我在Windows中运行构建时,我得到一个名为的文件Node App Setup 1.0.0.exe.到目前为止一切顺利.但是,我如何实际控制最终文件名?或者至少以编程方式检索该文件名,以便我可以读取它并以某种方式响应客户端?显然,我可以从json文件设置中将它拼凑在一起,但我宁愿它更明确.

Gre*_*g K 12

您可以artifactNamebuild您的部分中指定输出文件名package.json.

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

文件宏外,还支持$ {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}",
    ...
},
Run Code Online (Sandbox Code Playgroud)

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

node-app-1.0.0.exe


Ern*_*e S 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
    });
Run Code Online (Sandbox Code Playgroud)