使用纱线工作区进行电子锻造

问题描述 投票:0回答:1

我正在使用纱线工作区来分离我的电子应用程序的代码。我有 3 个工作区:

  1. 服务器 - 在主线程中运行串行端口服务器
  2. gui - 浏览器代码
  3. app - 定义电子应用程序的配置

app
工作区从
gui
server
工作区导入代码。当我尝试打包我的代码时,这给我带来了各种各样的悲伤。

最初,该应用程序正在打包,但缺少我的所有node_modules(例如抱怨它找不到“electron-squirrel-startup”)。我读到我可以禁用提升,以便 node_modules 文件夹将包含它需要的所有模块。

    "nohoist": ["**"]

由于我的应用程序在工作区之间导入,yarn 会创建指向这些项目的符号链接。看来电子构建器不喜欢这样,并且不遵循符号链接,而是尝试仅复制符号链接本身:

An unhandled rejection has occurred inside Forge:
Error: EPERM: operation not permitted, symlink 'C:\Users\joeja\projects\roguegeo\packages\server' -> 'C:\Users\joeja\AppData\Local\Temp\electron-packager\win32-x64\RogueGeo App-win32-x64-TeyVhU\resources\app\node_modules\@rg\server'

我一整天都在做这件事,从 NPM 工作区切换到 Yarn。这只是一个又一个的问题,我对此束手无策。

在开发中运行我的应用程序工作正常,它只是试图打包它,这给我带来了问题。

我在某处读到,我可以添加一个 afterCopy 挂钩来运行“yarn install --production”,但我无法让它工作。我也不认为它会解决我当前的问题,因为这也只会使用本地工作区的符号链接?

如何使用纱线工作区并构建电子锻造应用程序?

node.js electron yarnpkg yarn-workspaces electron-forge
1个回答
0
投票

我仍然看到一些其他错误,但能够绕过符号链接错误并通过在

forge.config.ts
中执行以下操作来输出包进程:

import { promisify } from "util";
import ChildProcess from "child_process";

const exec = promisify(ChildProcess.exec);

function copy({ src, dest }: { src: string, dest: string }) {
  return exec(`cp -r ${src} ${dest}`);
}

const config: ForgeConfig = {
  hooks: {
    packageAfterExtract: async (_config, buildPath) => {
      await copy({
        src: "../common",
        dest: `${buildPath}/Electron.app/Contents/Resources`
      })
    },
    //...
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.