Electron builder和资产文件

Electron builder和资产文件,electron,fs,electron-builder,Electron,Fs,Electron Builder,我在macOS上发布了一个电子应用程序 我在项目的根目录中有一些文件夹,在我的index.js旁边,我需要将它们包含在打包的应用程序中 在尝试对package.json中的每个文件进行硬编码后,没有任何帮助,我最终得到了以下代码块 "extraResources": [ { "from": "files/", "to": "files/", "filter": [ "**/*" ]

我在macOS上发布了一个电子应用程序

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

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

    "extraResources": [
      {
        "from": "files/",
        "to": "files/",
        "filter": [
          "**/*"
        ]
      },
      {
        "from": "assets/",
        "to": "assets/",
        "filter": [
          "**/*"
        ]
      },
      {
        "from": "accounts/",
        "to": "accounts/",
        "filter": [
          "**/*"
        ]
      }
    ]
如果我运行.app,文件似乎不在那里。打开内容/资源,我看到它们就在那里,因此,我四处玩弄,发现应用程序正在查看
app.asar
容器中的文件,而文件显然不在其中

我发现了一个小问题,在我的所有路径前面添加了几个
“…”
,因此它超出了
app.asar
容器,但我真的认为这是一个有点愚蠢的解决方案


另外,我计划为多个平台构建此应用程序,我有一种感觉,如果我使用这种黑客方式修复它,我将不得不为每个平台创建一个黑客程序,我宁愿不这样做…

如果您在html中使用文件(在我的示例中是assets/css等),或者在任何文件中都需要这样的文件夹结构,这些文件夹将自动地保存在asar中

节点:asar是只读软件包,创建此文件后不能添加、删除或编辑文件。

使用assets/css文件夹中的css文件很简单: 使用html文件中的相对路径,它可以在所有平台上工作

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

您必须在package.json中使用“extraFiles” extraFiles会将文件复制到Mac OS上的app conent目录,在Windows和Linux上,它会将文件复制到app根目录。如果使用extraResources,它会将文件复制到Mac上的内容/资源,在Windows上,它会将文件复制到资源文件夹

"extraFiles": [
  "files",
  "assets",
  "accounts"
]
注意:空文件夹将不会被复制

在应用程序中,使用类似于获取应用程序的根路径的内容,并使用具有此路径的文件

替代方法:使用
process.execPath
并替换可执行文件名以获得正确的路径

根据您的评论:

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

还没有尝试过,似乎很有希望。我的问题是,这将如何涵盖我使用.html文件中的.js和.css文件(在我的资产文件夹中)?因此,与外部文件和外部资源的区别在于
extrafile
将它们放在
Contents
目录中,而
extraResources
将它们放在
Contents/Resources
目录中。我的问题仍然存在,因为它确实将src文件夹放在了.asar中,是否没有标志可以在其中放置更多文件?我看到了您的编辑,我必须说我感谢您所做的所有努力。以下是我到目前为止学到的:如果我想在asar中添加额外的文件,我将通过package.json中的
“files”:[]
param添加它们,但是我遇到问题的主要原因是.asar是只读的,我会编写和取消文件链接,这意味着我必须在我的应用程序逻辑中重新构造一些东西。我会接受你的回答,因为你确实帮了我很大的忙,但是你能完整地添加只读问题以及文件、外部文件和外部资源添加相关文件的位置吗?