我应该如何在Lerna monorepo中处理依赖于本地的npm构建脚本?

问题描述

我最初是在Lerna GitHub上问这个问题的,但是我认为可以通过在Stack Overflow上发帖来吸引更多的读者。

我正在尝试与Lerna建立我的第一个monorepo,我需要在几点上做一些澄清。对于我没有使用问题模板的问题,我深表歉意,尽管我的问题并不真正适用于该格式。请让我知道此问题是否更适合StackOverflow,我将关闭该问题并将其发布在此处。

我的包裹结构如下:

├── lerna.json
├── package.json
├── package-lock.json
├── packages
│   ├── main
│   │   ├── build
│   │   ├── dist
│   │   ├── package.json
│   │   ├── package-lock.json
│   │   └── src
│   ├── renderer
│   │   ├── build
│   │   ├── jsconfig.json
│   │   ├── package.json
│   │   ├── package-lock.json
│   │   ├── public
│   │   │   ├── favicon.ico
│   │   │   ├── index.html
│   │   │   ├── logo192.png
│   │   │   ├── logo512.png
│   │   │   ├── manifest.json
│   │   │   └── robots.txt
│   │   ├── README.md
│   │   └── src
│   │   ├── App.css
│   │   ├── index.css
│   │   └── logo.svg
│   └── shared
│   ├── dist
│   ├── lib
│   │   └── constants
│   ├── package.json
│   └── package-lock.json
└── scripts

如您所见,我有三个主要软件包:

  • main-这是我的Electron应用程序,它又取决于渲染器和共享器
  • renderer-这是我的React应用,它托管在“主”应用中,并且依赖于共享
  • shared-包含main和renderer进程都使用的共享元素,因此必须在其中一个之前构建。

在我想要利用monorepo模式的地方,确实与构建脚本的功能有关,因为我的程序包彼此依赖。在实现monorepo模式之前,我的main的package.json构建脚本通过首先构建共享软件包,然后是渲染器,然后将构建的渲染器文件复制到main / build / html中,然后最终构建Electron软件包来运行。基本上看起来像这样:

"build": "cd ../shared; npm run build; cd ../renderer; npm run build; cd ../main; ncp ../renderer/build/. ./build/html",

尽管这仍然可以正常工作,但是我想到了一个monorepo,我应该在顶级package.json上处理所有构建交互,因此,我删除了上述步骤,并使每个构建只关心自己。例如,Electron软件包不再构建共享或渲染器软件包,它仅构建自身,如果缺少这些文件,则在尝试运行Electron二进制文件时将结束,因为它将无法运行。然后,我编写了一个顶层构建脚本,它将像这样同步启动每个软件包构建步骤:

  1. 清理所有程序包的构建/ dist文件
  2. 构建共享软件包
  3. 构建渲染器包
  4. 将构建的渲染器文件复制到主构建目录
  5. 列表项

虽然这一切都很好,但是如果我想直接从包文件夹中直接构建主要的Electron包,那么如果缺少必要的前驱文件,则构建可能会失败。

我应该如何处理这种情况?从来没有从软件包仓库中构建并从顶层开始做所有事情?任何建议将不胜感激!请让我知道是否需要澄清。

谢谢

CJ

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)