我对Angular 4+相当新。我们现在有一个角度4+应用程序正在生产中。它足够好,现在需要另一个应用程序。
新应用程序中将需要一些原始应用程序,主要是在服务区域(例如,日志记录,身份验证,配置)。
我不确定如何将这些服务分解为更具跨项目的可共享实体。是否有将共享服务纳入NPM模块的良好指南?这有点矫枉过正,我应该做类似的事情,比如git子模块吗?我还没有找到关于这个话题的好资源。
答案 0 :(得分:2)
这是一个很好的问题,更多的是关于构建项目的方法。 并且您已经在您的答案中提到了两种可能的解决方案。
解决方案#1:NPM库
将系统的可重用组件与库分离的常见做法。特别是对于企业系统,使用帮助程序库以跨项目重用是一种方便的方法。 (可以在私人npm或直接在私人git上托管。)
P.S。基本上,git子模块与将您的服务作为库托管并没有什么不同。只要你通过git链接到另一个项目,你就需要安装和构建它。正是您在保持package.json
文件中的依赖性时正在做的事情。
解决方案#2:Monorepo
此外,流行的解决方案因谷歌,Facebook等大型公司而闻名。将所有项目保留在单一仓库中,因此您绝对可以在项目中重复使用任何服务/组件。
<强>结论强>
做出决定应取决于您要分享的代码量和复杂性。
从你的问题来看,我明白你只需要一些小块来建立你的项目。我建议建立一般的基于组件的库。所以你可以import
从它组件&amp;您在项目中需要的服务。这种方法的缺点是测试。一旦您更新库版本,您将需要确保之后没有任何中断。
Monorepo 可以为您提供快速安全的代码方面的优势。如果您的所有代码都在一个repo中,那么在单个位置进行更改并对所有项目运行测试显然更容易。但在这种情况下,项目的灵活性和发布过程可能会成为一大难题。
答案 1 :(得分:1)
我确信我落在这上面并不是最合适的。也就是说,我不想在我的案例中过度设计,只是简单地跨项目共享一些JS代码。
我最终只是创建了一个包含共享JS的git repo。然后在使用repo中我使用子树命令将JS的子目录从消费仓库推入/拉出共享仓库。然后,其他项目可以根据需要执行相同的操作,并且可以在共享仓库中使用分支来管理版本控制。
最终为我创建的是/ lib目录,它位于普通/ src目录之外。但是,在我的tsconfig.json文件中,我拉了/ lib JS并用/ src编译它:
transitionDuration
最终得到一种非常简单的方法来提取常见的JS文件,将它们放在一个单独的仓库中以便共享,并将它们编译到每个消费项目中,就像它们在项目本身一样。无需弄乱NPM包,依赖项等。如果您感兴趣,可以使用一些git命令:
设置共享仓库的遥控器:
"include": [
"src/**/*.ts",
"lib/**/*.ts"
],
将共享仓库添加到消费项目中:
git remote add -f SHARED_JS_REMOTE <Your Shared Repo URL Here>
将更改从使用repo推回到共享仓库:
git subtree add --prefix=lib/shared-js SHARED_JS_REMOTE master
将共享仓库中的更改恢复为消费回购:
git fetch SHARED_JS_REMOTE master
git subtree push --prefix=lib/shared-js SHARED_JS_REMOTE master