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):

  1. npm inpm ci
  2. npm run build
  3. electron package
  4. 等等

因此您应该将所有这些文件夹添加到您的 .gitignore 文件中:

# compiled output
/dist
/tmp
/out-tsc
/packages

# dependencies
/node_modules