我正在进行角度应用。我们的应用程序基于https://github.com/Swiip/generator-gulp-angular,一切正常。这个角度种子项目基本上扫描目录中的所有JS文件,并在您投入生产时将它们连接成一个JS文件。
我们正在为结算系统构建管理员后端。客户现在也想要一个"公共后端"为他们所有的客户。客户端基本上登录并发送消息的地方。 UI对于公共后端是相同的,我们可以在任何地方重复使用相同的指令。唯一的问题是公共后端很小,管理员后端很庞大。我不认为为随机客户端提供完整的管理员应用程序是一种很好的做法。
如何从同一代码库构建两个应用程序?
答案 0 :(得分:7)
不要从同一代码库提供两个应用程序。这是灾难的秘诀。这是我如何处理这个问题的大致概述:
正如其他人所说,你会使用像Grunt / Gulp这样的优秀构建工具来管理应用程序,这会为你提供共同的依赖关系。
答案 1 :(得分:5)
我也不得不同意接受的答案。维护一个代码库要简单明了,耗时少,如果您的项目扩展到需要独立部署和构建的更多应用程序,这将是有利的。
定义构建
每个应用程序都会有一个app.js文件,定义要导入哪些组件并从中进行构建。结构可能类似于以下内容:
components
-- component-1
-- component-2
-- component-3
app-1
-- app.js
app-2
-- app.js
要构建app-1,我们需要组件1和3,所以在app-1 / app.js中我们定义:
require('../components/component-1/file.js')
require('../components/component-3/file.js')
如果您想单独部署与用户相关的设置,可以创建具有自己路由的UserSettings模块,并包含此模块所需的组件。然后,此模块将包含在应用程序的构建中。这同样适用于路线,配置,运行等。 - 最佳地,这些都适用于一个模块或组件。
<强>依赖关系强>
在某些时候,您将面临是否要一次性捆绑所有应用程序的依赖关系,或者为每个应用程序单独创建捆绑包的问题。到目前为止,我提出的唯一解决方案是为每个应用程序策划依赖项的手动列表,并根据该列表执行捆绑器,但我确信有更好的方法。
答案 2 :(得分:3)
我不同意这里提出的选项。如果我构建可重用的组件,那么将我的代码库拆分为3个不同项目的想法是可行的。但我只是拆分了我的应用程序。这些部分不会在我的任何其他项目中重复使用,因为它们是项目特定的。
维护3个不同项目(依赖项,构建,文档,发布,版本控制)的开销不值得。
我相信研究ES6导入(使用Webpack或System.js)或者RequireJS是一个更好的选择,但是我不知道它们如何在Angular1.X生态系统中工作。