使用electron-builder时如何修改app.asar的文件夹结构?
How to modify the folder structure of app.asar when using electron-builder?
我正在使用 create-react-app (CRA) 来创建和构建我的前端代码。我的(简化的)文件夹结构如下所示:
package.json
node_modules/
public/
└── electron.js
└── index.html
src/
我的 npm 脚本:
"build": {
"appId": "com.somedomain.app",
},
"scripts": {
"react-start": "react-scripts start",
"react-build": "react-scripts build",
"react-test": "react-scripts test --env=jsdom",
"react-eject": "react-scripts eject",
"electron-build": "electron-builder",
"release": "yarn react-build && electron-builder --publish=always",
"build": "yarn react-build && yarn electron-build"
}
当我 运行 "build" 时,项目已构建并且有一个包含所有内容的 build
文件夹,然后 electron 使用该文件夹创建 app.asar
文件。当我提取内容时,我看到以下结构:
package.json
node_modules/
build/
└── electron.js
└── index.html
electron-builder 是怎么知道从我的项目文件夹中取出 build
文件夹的?我尝试通过像这样玩 package.json 的 "build"
字段来弄清楚:
"build": {
"appId": "com.somedomain.app",
"files": "app"
},
并将我的 build
文件夹重命名为 app
但随后出现以下错误:
⨯ Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
似乎电子仍然试图从 build
文件夹中 运行 electron.js
,现在 app.asar
中不存在该文件夹。
如何修改app.asar
文件中的文件结构?它是否必须包含 build
文件夹?理想情况下,我希望具有以下结构:
package.json
node_modules
electron/
└── electron.js
frontend
└── index.html
我尝试修改 "files"
字段,我尝试了 "extraFiles"
和 "buildResources"
但即使我可以按照我的方式获取 app.asar
中的文件夹结构想要它,我继续得到错误:
⨯ Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
我发现问题出在哪里了。显然,当 electron-builder 看到 react-scripts 在依赖项中时,它会自动使用一个名为 react-cra 的内置配置。 react-cra 的内置配置如下所示:
directories: {
buildResources: "assets"
},
files: ["build/**/*"],
extraMetadata: {
main: "build/electron.js"
}
extraMetadata
字段是导致
的原因
⨯ Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
错误。
要防止使用 react-cra 内置配置,可以在 package.json 的 "build"
字段中添加 "extends": null
。通过以下配置,我得到了想要的结果:
"build": {
"appId": "io.gueney.app",
"extends": null,
"files": [
"electron/**/*",
"frontend/**/*"
]
},
我正在使用 create-react-app (CRA) 来创建和构建我的前端代码。我的(简化的)文件夹结构如下所示:
package.json
node_modules/
public/
└── electron.js
└── index.html
src/
我的 npm 脚本:
"build": {
"appId": "com.somedomain.app",
},
"scripts": {
"react-start": "react-scripts start",
"react-build": "react-scripts build",
"react-test": "react-scripts test --env=jsdom",
"react-eject": "react-scripts eject",
"electron-build": "electron-builder",
"release": "yarn react-build && electron-builder --publish=always",
"build": "yarn react-build && yarn electron-build"
}
当我 运行 "build" 时,项目已构建并且有一个包含所有内容的 build
文件夹,然后 electron 使用该文件夹创建 app.asar
文件。当我提取内容时,我看到以下结构:
package.json
node_modules/
build/
└── electron.js
└── index.html
electron-builder 是怎么知道从我的项目文件夹中取出 build
文件夹的?我尝试通过像这样玩 package.json 的 "build"
字段来弄清楚:
"build": {
"appId": "com.somedomain.app",
"files": "app"
},
并将我的 build
文件夹重命名为 app
但随后出现以下错误:
⨯ Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
似乎电子仍然试图从 build
文件夹中 运行 electron.js
,现在 app.asar
中不存在该文件夹。
如何修改app.asar
文件中的文件结构?它是否必须包含 build
文件夹?理想情况下,我希望具有以下结构:
package.json
node_modules
electron/
└── electron.js
frontend
└── index.html
我尝试修改 "files"
字段,我尝试了 "extraFiles"
和 "buildResources"
但即使我可以按照我的方式获取 app.asar
中的文件夹结构想要它,我继续得到错误:
⨯ Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
我发现问题出在哪里了。显然,当 electron-builder 看到 react-scripts 在依赖项中时,它会自动使用一个名为 react-cra 的内置配置。 react-cra 的内置配置如下所示:
directories: {
buildResources: "assets"
},
files: ["build/**/*"],
extraMetadata: {
main: "build/electron.js"
}
extraMetadata
字段是导致
⨯ Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
错误。
要防止使用 react-cra 内置配置,可以在 package.json 的 "build"
字段中添加 "extends": null
。通过以下配置,我得到了想要的结果:
"build": {
"appId": "io.gueney.app",
"extends": null,
"files": [
"electron/**/*",
"frontend/**/*"
]
},