我在 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 是只读包,创建此文件后不能添加、删除或编辑文件。
assets/css文件夹下的css文件的使用很简单: 使用您的 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/