electron-builder MSI安装程序asar文件太大

tez616oj  于 11个月前  发布在  Electron
关注(0)|答案(2)|浏览(225)

我有一个Angular应用程序,我需要创建一个MSI安装程序。我已经成功创建了一个电子应用程序(npm run electron),但当我尝试创建安装程序时,我得到了这个错误:
错误LGHT 0263:'C:...\release\win-unpacked\resources\app.asar'太大,文件大小必须小于2147483648。
我按照这个顺序运行命令:

  1. npm run electron-->运行电子应用程序本身,看看它是否工作(我在执行下一步之前关闭了应用程序)
  2. npm run tsc
  3. npm run step2
  4. npm run electron:build
    我想我在electron-builder.json中包含了太多的文件,但我不确定我可以删除什么,以及应用程序运行所需的内容,因为这是我第一次使用electron和electron-builder。
    当我在electron-builder.json中设置"asar": false时,MSI安装程序被创建,但我得到警告asar usage is disabled — this is strongly not recommended,它需要很长时间(即30分钟左右)才能构建,MSI数据包大小几乎为1.5 GB。

有人知道如何减少asar的大小吗?

这是我的项目结构:

|- dist
|- electron
   |- main.ts
   |- package.json
|- node_modules
|- release
|- src
   |- all angular source code
|- angular.json
|- electron-builder.json
|- package.json
|- tsconfig.json
|- tsconfig.serve.json

字符串
在package.json:

"scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "electron": "ng build --configuration electron && electron .",
    "tsc": "tsc -p tsconfig.serve.json",
    "step2": "ng build --base-href ./ --configuration electron",
    "electron:build": "electron-builder build --publish=never"
  }


electron-builder.json:

{"asar": true,
  "directories": {
    "output": "release/"
  },
  "files": [
    {
      "from": "dist",
      "filter": ["**/*"]
    },
    {
      "from": "electron",
      "filter": ["**/*"]
    },
    {
      "from": "src",
      "filter": ["**/*"]
    },
    "!**/*.ts",
    "!*.map",
    "!package.json",
    "!package-lock.json",
    "!node_modules/**",
    "!.angular/**",
    "!.vscode/**",
    "!cypress/**",
    "!release/**"
  ],
  "win": {
    "icon": "offline-test.ico",
    "target": [
      "msi"
    ]
  }
}


tsconfig.serve.json:

{
  "compilerOptions": {
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "target": "es2015",
    "types": [
      "node"
    ],
    "lib": [
      "es2017",
      "es2016",
      "es2015",
      "dom"
    ]
  },
  "files": [
    "electron/main.ts"
  ],
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]
}


我看了this question,但我认为我排除了MSI文件所在的目录,所以我不确定还能排除什么。

qzlgjiam

qzlgjiam1#

我从来没有使用过Angular,所以我不能给予你完整的工作配置,但是无论使用什么库,通常在打包Electron时,你首先要打包你的文件,然后只打包这些文件
大致来说,你应该:

  • 将渲染器、主文件和预加载(如果有的话)文件捆绑到一个输出文件夹中
  • 确保使用不同的输出文件夹进行捆绑和打包(以防止冲突)
  • 告诉构建器只打包包输出文件夹
  • 添加无法手动绑定的模块(如果有的话)

一旦你把所有的东西都整齐地放在你的输出文件夹里(我收集到的是Angular的默认值是dist/[project-name]),你就可以相应地配置electron-builder了:

{
  "extraMetadata": {
    // This will change the `main` field of your `package.json`,
    // so electron-builder will use the file made for prod.
    "main": "dist/[project-name]/[path-to-bundled-main-file]"
  },
  "files": [
    "./dist/[project-name]/**/*"
  ]
}

字符串
对于不能捆绑的本机模块,您可以使用asarUnpack选项将它们包含在包中。
另外,如果我没有错的话,Angular CLI使用webpack来捆绑,所以你可能需要使用targetelectron-mainelectron-preload来捆绑你的Electron文件,这样一切都能正常工作。

3npbholx

3npbholx2#

我最终的app.asar文件是~187 Mb
我的最终.exe文件是~168 Mb
我的安装程序是~87 Mb
我仍然在清理东西,到目前为止,我明确排除了SRC代码(仍然在开发环境中,所有内容都在同一个文件夹中),

{
  ...
  "build": {
    "asar": true,
    "files": [
      "!src/**",
      "!.vscode/**"
    ]
   ...
}

字符串
检查ASAR文件的内容(安装7-Zip和配套插件Asar 7z),确保没有包含不需要的文件

相关问题