Ker*_*ney 3 javascript node.js electron asar electron-builder
我正在使用 create-react-app (CRA) 创建和构建我的前端代码。我的(简化的)文件夹结构如下所示:
package.json
node_modules/
public/
??? electron.js
??? index.html
src/
Run Code Online (Sandbox Code Playgroud)
我的 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"
}
Run Code Online (Sandbox Code Playgroud)
当我运行“build”时,项目被构建并且有一个build包含所有内容的文件夹,然后电子使用它来创建app.asar文件。当我提取内容时,我看到以下结构:
package.json
node_modules/
build/
??? electron.js
??? index.html
Run Code Online (Sandbox Code Playgroud)
电子制造商如何知道build从我的项目文件夹中取出文件夹?我尝试通过使用"build"我的 package.json的字段来解决它,如下所示:
"build": {
"appId": "com.somedomain.app",
"files": "app"
},
Run Code Online (Sandbox Code Playgroud)
并将我的build文件夹重命名为,app但随后出现以下错误:
? Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
Run Code Online (Sandbox Code Playgroud)
似乎电子仍然试图electron.js从build文件夹中运行,现在app.asar.
如何修改文件中的app.asar文件结构?它必须包含一个build文件夹吗?理想情况下,我希望具有以下结构:
package.json
node_modules
electron/
??? electron.js
frontend
??? index.html
Run Code Online (Sandbox Code Playgroud)
我尝试更多地修改该"files"字段,我尝试过"extraFiles","buildResources"但即使我可以app.asar按照我想要的方式获取文件夹结构,我仍然会收到错误消息:
? Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
Run Code Online (Sandbox Code Playgroud)
我发现了问题所在。显然,当电子构建器看到 react-scripts 在依赖项中时,它会自动使用称为 react-cra 的内置配置。react-cra 的内置配置如下所示:
directories: {
buildResources: "assets"
},
files: ["build/**/*"],
extraMetadata: {
main: "build/electron.js"
}
Run Code Online (Sandbox Code Playgroud)
该extraMetadata领域是导致
? Application entry file "build\electron.js" in the "[redacted][\app.asar" does not exist. Seems like a wrong configuration.
错误。
为了防止使用 react-cra 内置配置,可以"extends": null在 package.json 的"build"字段中添加。通过以下配置,我得到了想要的结果:
"build": {
"appId": "io.gueney.app",
"extends": null,
"files": [
"electron/**/*",
"frontend/**/*"
]
},
Run Code Online (Sandbox Code Playgroud)