Electron:在 macOS 和 Windows 之间共享同一个项目文件夹
Electron: Sharing the same project folder between macOS and Windows
目标
我阅读了很多关于应用程序引导和构建管道的 Electron 教程,并假设您可以有一个项目来处理跨平台操作。
但在打包和构建过程中经历了无数次失败后,我终于意识到也许我的假设是错误的。
问题
这是我想要的基于 electron-forge 的工作流程:
1。在 Windows
上创建应用框架
yarn create electron-app my-app
cd my-app
yarn add my-dependency
yarn start
yarn make
一切顺利。现在进入 macOS
2。将项目转移到 macOS 上
在 macOS 上,运行 应用会导致错误
cd my-app
yarn start
错误看起来像这样
$ yarn start
yarn run v1.22.4
$ electron-forge start
✔ Checking your system
✔ Locating Application
✔ Preparing native dependencies: 1 / 1
✔ Launching Application
/path/to/my-app/node_modules/electron/dist/electron.exe: /path/to/my-app/node_modules/electron/dist/electron.exe: cannot execute binary file
error Command failed with exit code 126.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
所以我在 macOS 上盲目重装了 electron
yarn add electron
yarn start
yarn make
在 macOS 上一切正常。
现在回到 Windows。
3。返回 Windows 仔细检查
这次。我遇到了与步骤 #2 中类似的问题。 Windows 发行版现在有错误的 Electron 二进制文件。
调查结果
我发现这个文件经常被覆盖,即使我在 Windows 和 macOS 之间传输项目文件时仔细合并也是如此。
my-app/node_modules/electron/path.txt
它包含 Electron 可执行文件的硬编码路径:
macOS
Electron.app/Contents/MacOS/Electron
Windows:
electron.exe
解决方法
我可以通过将预定义的元数据复制到项目文件夹来添加预构建步骤,具体取决于当前平台。但是像这样的 hack 对于像 Electron 这样的框架来说听起来很蹩脚。
问题
所以对我来说,这种元数据安排使得很难在 Windows 和 macOS 之间共享同一个项目。我无法想象 Electron 开发人员会这样工作。
那么我错过了什么?
基本上,您根本不应该提交 node_modules
。一些 post 安装脚本可能会为特定 OS 编译软件包,并且文件夹通常很大。
此外,您不应提交构建、打包或编译命令的任何结果。通常,应忽略 dist
个文件夹。
您的存储库应仅包含代码和配置文件。
这个想法是,提交这些文件和文件夹是没有意义的,因为您已经完成了在任何机器上重现结果所需的所有步骤:您的 windows 计算机、您的 macOS 计算机、您的 CI环境等 例如(这些是pseudo-commands):
npm i
或 npm ci
npm run build
electron package
- 等等
因此您应该将所有这些文件夹添加到您的 .gitignore
文件中:
# compiled output
/dist
/tmp
/out-tsc
/packages
# dependencies
/node_modules
目标
我阅读了很多关于应用程序引导和构建管道的 Electron 教程,并假设您可以有一个项目来处理跨平台操作。
但在打包和构建过程中经历了无数次失败后,我终于意识到也许我的假设是错误的。
问题
这是我想要的基于 electron-forge 的工作流程:
1。在 Windows
上创建应用框架
yarn create electron-app my-app
cd my-app
yarn add my-dependency
yarn start
yarn make
一切顺利。现在进入 macOS
2。将项目转移到 macOS 上
在 macOS 上,运行 应用会导致错误
cd my-app
yarn start
错误看起来像这样
$ yarn start
yarn run v1.22.4
$ electron-forge start
✔ Checking your system
✔ Locating Application
✔ Preparing native dependencies: 1 / 1
✔ Launching Application
/path/to/my-app/node_modules/electron/dist/electron.exe: /path/to/my-app/node_modules/electron/dist/electron.exe: cannot execute binary file
error Command failed with exit code 126.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
所以我在 macOS 上盲目重装了 electron
yarn add electron
yarn start
yarn make
在 macOS 上一切正常。
现在回到 Windows。
3。返回 Windows 仔细检查
这次。我遇到了与步骤 #2 中类似的问题。 Windows 发行版现在有错误的 Electron 二进制文件。
调查结果
我发现这个文件经常被覆盖,即使我在 Windows 和 macOS 之间传输项目文件时仔细合并也是如此。
my-app/node_modules/electron/path.txt
它包含 Electron 可执行文件的硬编码路径:
macOS
Electron.app/Contents/MacOS/Electron
Windows:
electron.exe
解决方法
我可以通过将预定义的元数据复制到项目文件夹来添加预构建步骤,具体取决于当前平台。但是像这样的 hack 对于像 Electron 这样的框架来说听起来很蹩脚。
问题
所以对我来说,这种元数据安排使得很难在 Windows 和 macOS 之间共享同一个项目。我无法想象 Electron 开发人员会这样工作。
那么我错过了什么?
基本上,您根本不应该提交 node_modules
。一些 post 安装脚本可能会为特定 OS 编译软件包,并且文件夹通常很大。
此外,您不应提交构建、打包或编译命令的任何结果。通常,应忽略 dist
个文件夹。
您的存储库应仅包含代码和配置文件。 这个想法是,提交这些文件和文件夹是没有意义的,因为您已经完成了在任何机器上重现结果所需的所有步骤:您的 windows 计算机、您的 macOS 计算机、您的 CI环境等 例如(这些是pseudo-commands):
npm i
或npm ci
npm run build
electron package
- 等等
因此您应该将所有这些文件夹添加到您的 .gitignore
文件中:
# compiled output
/dist
/tmp
/out-tsc
/packages
# dependencies
/node_modules