...
This problem is broken down into 2 main parts: separating the UI into multiple git repositories and allowing for functionality (e.g. calculation, view, etc) to be wired into another.
- Seperating Separating UI components into separate Git repositories seems to have a number of possible solutions. The current front-runner seems to be using Bower in conjunction with Grunt and NPM. An alternative could be Grunt with grunt-curl, which would be considerably lighter-weight but would miss out on any packaging or versioned dependency management. NPM could be used alone, for which it supports nested dependencies, however this heavy-weight approach isn't generally favored since a web-app wouldn't want modules to load their own JQuery (for example). Bower is lighter-weight, doesn't allow nested dependencies, and seems to be favored on the front end.
- Functional modularity
- is something that's coming in ECMA 6, however presently few browser's support ECMA 6, nor does it seem that we should assume that low-resources environments will have adoption of those browsers in 2017. A good timeline for browser support of ECMA 6 isn't well-known at present.
- ECMA 5 supports modularity in a couple ways, however most seem to have rallied around AMD (Asynchronous Modular Definition) and RequireJS. RequireJS allows modules to be defined and can load them asynchronously while taking care of the load order. Using RequireJS with AngularJS 1 also seems to be well written about and they seem to naturally compliment one another (AngularJS has modules and handles dependency injection, RequireJS can define which module is loaded). AngularJS 2 also natively supports AMD (and so presumably you don't need RequireJS).
- Our current code is written in AngularJS 1 utilizing the built-in module support.
...