Electron 生成器和 Assets 文件

标签 electron fs electron-builder

我在 macOS 上构建用于分发 Electron 应用程序时遇到问题。

我的项目根目录中有一些文件夹,在我的 index.js 旁边,我需要将其包含在打包的应用程序中。

在尝试对 package.json 中的每个文件进行硬编码后,这没有帮助,我最终得到了以下 block

    "extraResources": [
      {
        "from": "files/",
        "to": "files/",
        "filter": [
          "**/*"
        ]
      },
      {
        "from": "assets/",
        "to": "assets/",
        "filter": [
          "**/*"
        ]
      },
      {
        "from": "accounts/",
        "to": "accounts/",
        "filter": [
          "**/*"
        ]
      }
    ]

如果我运行 .app,文件似乎不存在。打开 Contents/Resources,我看到它们在那里,所以,四处游玩,我发现该应用程序正在查看 app.asar 容器内部,显然文件不在那里。

我通过在所有路径前添加几个 '..' 发现了一个小 hack,所以它超出了 app.asar 容器,但我真的认为这是我的问题的解决方案有点愚蠢。

另外,我计划为多个平台构建它,我觉得如果我通过这种 hacky 方式修复它,我将不得不为每个平台创建一个 hack,我宁愿不这样做...

最佳答案

如果您有在 html 中使用的文件(在我的示例 assets/css 等中),或者在任何文件中需要并且具有这样的文件夹结构,这些文件夹将自动位于 asar 中。

注意:asar 是只读包,创建此文件后不能添加、删除或编辑文件。
enter image description here

assets/css文件夹下的css文件的使用很简单: enter image description here 使用您的 html 文件中的相对路径,它适用于所有平台。

如果您有与您的项目无关的文件,或者您的项目中未使用但应该在打包的应用程序中可用的文件:

你必须在你的 package.json 中使用“extraFiles” extraFiles 会将文件复制到 Mac OS 上的应用程序内容目录,在 Windows 和 Linux 上,它会将其复制到应用程序根目录。如果您使用 extraResources,它会在 Mac 上将文件复制到 Contents/Resources,在 Windows 上它会将文件复制到 resources 文件夹。

"extraFiles": [
  "files",
  "assets",
  "accounts"
]

注意:空文件夹不会被复制

在您的应用中使用类似 this module 的内容获取您的应用程序的根路径,并通过此路径使用您的文件

备选方案:使用 process.execPath 并替换您的可执行文件名称以获得正确的路径

根据您的评论:
如果您必须在您的应用程序 html 中加载此文件 (css/js),您可以使用我上面提供的解决方案在 onload 事件上动态加载。

关于 Electron 生成器和 Assets 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62436295/

相关文章:

python - 使用 angular-electron 打包可执行二进制文件

javascript - 在Electron渲染器进程中持久化nedb到磁盘(Webpack/Electron/nedb配置问题)

javascript - 如何用 Electron 制作半透明的应用程序背景?

javascript - 使用存储查找字符串的数组和存储替换字符串的数组替换文件中的字符串

node.js - 不适用于 Node js 中的 fs.readFile

electron - 在 Electron 构建器构建过程中 buildResources 文件夹的目的是什么?

javascript - 构建应用程序后 Electron index.html 未加载

javascript - 通过代理发送所有 Electron HTTP请求。

javascript - 尝试为我的 Electron 应用程序创建安装程序时生成未找到错误

node.js - Node js找不到与父路径相关的我自己的模块