【问题标题】:Angular 4+ Assistance: Sharing Services across projectsAngular 4+ 协助:跨项目共享服务
【发布时间】:2018-04-11 23:19:47
【问题描述】:

我对 Angular 4+ 还很陌生。我们现在有一个 Angular 4+ 应用程序正在生产中。它在现在需要另一个应用程序的地方运行得很好。

新应用中将需要一些原始应用,主要是在服务领域(例如日志记录、身份验证、配置)。

我不确定如何将这些服务拆分为一个更可跨项目共享的实体。有没有很好的指南将共享服务变成 NPM 模块?那是不是有点矫枉过正,我应该做类似的事情吗,比如 git 子模块?我还没有找到关于这个主题的好资源。

【问题讨论】:

  • 为了最小化我的依赖问题,我认为将共享的 .ts 文件包含到使用项目中可能是最简单的。我确信这可以使用 Git 子模块或子树来实现。我猜像 NPM 这样的工具是不可能的,因为 NPM 包可能是一个自包含的功能实体(不是需要由消费项目编译的东西)?

标签: git angular npm


【解决方案1】:

这是一个很好的问题,更多的是关于构建项目的方式。 而且您已经在回答中提到了两种可能的解决方案。

解决方案 #1:NPM 库

将系统的可重用组件与库分开是很常见的做法。尤其是对于企业系统来说,让助手库跨项目重用是一种便捷的方式。 (可以托管在私有 npm 或直接托管在私有 git 上)。

附:基本上 git 子模块与将您的服务托管为库并没有真正的不同。只要您通过 git 链接到另一个项目,您就需要安装和构建它。在 package.json 文件中保持依赖关系的同时,您正在做什么。

解决方案 #2:Monorepo

此外,流行的解决方案因 Google、Facebook 等大公司而出名。将所有项目保存在单个存储库中,因此您绝对可以跨项目重用您的任何服务/组件。

结论

做出决定应取决于您要共享的代码量及其复杂性。

根据您的问题,我了解到您只需要小块来构建您的项目。我建议构建通用的基于组件的库。因此,您可以import 从中获得项目中所需的组件和服务。这种方法的缺点是测试。更新库版本后,您需要确保之后没有任何中断。

Monorepo 可以在您每次需要更改某些核心服务时为您提供快速和安全的代码方面的优势。如果您的所有代码都在一个存储库中,那么在一个地方对所有项目进行更改和运行测试显然更容易。但在这种情况下,项目的灵活性和发布过程可能会成为一大难题。

【讨论】:

【解决方案2】:

我敢肯定,我在这不是最合适的。也就是说,在我的案例中,我不想过度设计来简单地跨项目共享一些 JS 代码。

我最终只是创建了一个包含共享 JS 的 git 存储库。然后在消费仓库中,我使用子树命令将 JS 的子目录从消费仓库推入/拉出共享仓库。然后其他项目可以根据需要执行相同的操作,如果需要,可以在共享存储库中使用分支来管理版本控制。

这最终为我创建的是一个位于正常 /src 目录之外的 /lib 目录。但是,在我的 tsconfig.json 文件中,我将 /lib JS 拉入并使用 /src 进行编译:

"include": [
    "src/**/*.ts",
    "lib/**/*.ts"
  ],

这最终得到了一种非常简单的方法来提取常见的 JS 文件,将它们放在单独的 repo 中用于共享目的,然后将它们编译到每个使用项目中,就好像它们在项目本身中一样。无需弄乱 NPM 包、依赖项等。如果您对此感兴趣,请使用一些 git 命令:

设置远程共享仓库:

git remote add -f SHARED_JS_REMOTE <Your Shared Repo URL Here>

将共享仓库添加到消费项目中:

git subtree add --prefix=lib/shared-js SHARED_JS_REMOTE master

将更改从使用 repo 推送回共享 repo:

git fetch SHARED_JS_REMOTE master
git subtree push --prefix=lib/shared-js SHARED_JS_REMOTE master

将更改从共享 repo 拉回消费 repo:

git fetch SHARED_JS_REMOTE master
git subtree pull --prefix=lib/shared-js SHARED_JS_REMOTE master

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2017-06-29
    • 2018-05-04
    • 2019-05-03
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多