vue.js - 如何在没有 monorepo 的情况下在多个 vue 应用程序中组织代码(组件)共享

标签 vue.js npm yarnpkg package-managers code-reuse

我们正在计划三个类似的 Vue 项目。我们已经知道我们将能够在所有这些中重用大量代码(尤其是 vue SFC 和简单的 js 辅助函数),并且我们正在寻找一种在它们之间共享代码的适当方法。
不幸的是,项目的范围相当不同,monorepo 是 不是 由于其在读/写权限和可见性管理方面的限制而成为一个选项。因此,我们计划将可重用部分作为单独的 repos(以及最有可能的私有(private) npm 包)处理,这似乎是一种简单的方法。 但是,问题是:我们如何创建一个方便的设置,以便我们能够在其中一个父项目的范围内处理共享组件?
项目 A [project-repo-a]

  • A
  • 的项目特定内容
  • 私有(private)包 A [package-repo-a](可以在项目 A 中方便地编辑)
  • 私有(private)包 B [package-repo-b](可以在项目 A 中方便地编辑)

  • 项目 B [project-repo-b]
  • B的项目特定的东西
  • 私有(private)包 B [package-repo-b](可以在项目 B 中方便地编辑)
  • 私有(private)包 C [package-repo-c](可以在项目 B 中方便地编辑)

  • 在我们的 PHP 项目中,有一个简单的解决方案,我们只需要通过 composer 使用具有 prefer-source 选项的可重用部分,该选项提供完整的 git 存储库,可以直接在父应用程序中使用。但是,据我们了解,npm 或 yarn 中没有 prefer-source 的东西。那么我们如何才能实现所需的设置呢? (或者我们是否忽略了这种设置的主要缺点?)
    我们已经研究/考虑了以下内容(没有找到合适的方法):
  • yarn /npm 链接:我们理解,我们通常可以使用链接,但这似乎是一种非常不方便的方法,同时不断开发共享组件(并且总是必须发布它们以反射(reflect)最新的变化)。
  • yarn 工作区/lerna:似乎最接近我们想要的,但是它们似乎(或明确地)为 monorepo 方法设计。最后,他们没有提供解决方案来实际将包的 git 源(在单独的 repo 中)放入父项目(因为没有 --prefer-source 的东西)——是吗?
  • 额外使用 Composer :只需使用 composer 拉下 git 源代码并从 composer 供应商文件夹中创建 yarn 工作区。然而,这显然是一种 hacky 方式,而且对于整个依赖管理来说听起来很容易出错
  • 使用 yarn 安装后脚本 拉下所需私有(private)包的git源,但是作为composer方式,这在模块解析,依赖管理等方面似乎是相当不可预测的。
  • 使用 git 子模块和 yarn 工作区:可能是一个解决方案。老实说,我们对 git 子模块完全没有经验,乍一看它看起来不是很直观。如果没有其他方法,我们无论如何都会考虑使用这种方法。

  • 要明确这一点:我们是 不是 询问口味问题,这些方法中的一种或另一种是否是“最好的”。我们觉得他们都不是正确的。问题是:我们是否忽略了一种技术上干净且经过验证的方案,使用 npm、yarn 或其他包管理器/依赖管理解决方案?

    最佳答案

    Git X-Modules是一种工具,旨在完全按照您的要求进行操作。这里是 a video这解释了它。然而,它是非常新的,因此不能真正被认为是“经过验证的”:-)
    但是,如果您考虑尝试一下,我们很乐意听到您的反馈!
    (正如你可能从上一句中猜到的,我是开发团队的一员。)

    关于vue.js - 如何在没有 monorepo 的情况下在多个 vue 应用程序中组织代码(组件)共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66500778/

    相关文章:

    vue.js - Vue CLI 在没有服务器的情况下构建和运行 index.html 文件

    javascript - 仅对当前文件夹运行 Jest 测试

    javascript - 使用react-app-rewired将webpack配置添加到react-create-app

    node.js - VSCode上的pwa-node类型启动配置是什么?

    node.js - 无法为 Ionic 安装 node-sass

    docker - 在docker镜像中安装yarn时出现权限问题

    javascript - 全局父 : Regular expression denial of service

    css - 来自子组件的 Vue 3 插槽样式

    javascript - 通过 Flask API 发送 json 不会接受我的论点

    javascript - VueJs - 动画数字变化