代码之家  ›  专栏  ›  技术社区  ›  Joe Jankowiak

用纱线工作空间进行电子锻造

  •  0
  • Joe Jankowiak  · 技术社区  · 1 年前

    我正在使用yarn工作区为我的电子应用程序分离代码。我有三个工作空间:

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

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

    最初,该应用程序正在打包,但缺少我所有的node_module(例如抱怨找不到“电子松鼠启动”)。我读到我可以禁用提升,这样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的工作空间切换到了纱线。这只是一个又一个问题,我对此束手无策。

    在开发中运行我的应用程序效果很好,只是试图打包它,这给我带来了问题。

    我在某个地方读到,我可以添加一个afterCopy钩子来运行“纱线安装-生产”,但我还没能让它发挥作用。我也不认为它能解决我目前的问题,因为它也只会使用本地工作区的符号链接?

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

    0 回复  |  直到 1 年前
        1
  •  0
  •   Stephen Handley    1 年前

    我仍然看到了一些其他错误,但能够绕过符号链接错误,并通过在中执行以下操作来输出包进程 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`
          })
        },
        //...
      }
    };
    
    推荐文章