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

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.jsonbuild 部分中使用artifactName 指定输出文件名。

文档说artifact file name template 支持$ext 宏:

除了file macros,还支持$ext宏。

文件宏

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

$arch — 扩展为 ia32x64。如果没有拱门,宏将从您的模式中删除,前导空格,- 和 _(因此,您无需担心,可以重复使用模式)。$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
    );

【讨论】:

以上是关于在电子生成器中检索或指定输出文件名的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio不生成任何文件以输出路径

Idea生成Javadoc

如何在bash中检索文件名或扩展名[重复]

一个检索绝对路径下指定后缀或关键字的小代码

Linux find 命令详解

Google Sheets API:创建电子表格或将电子表格移动到文件夹中