We have a large WPF suite of applications that we want to move to Angular v 5. (this is an intranet deployment, not an internet deployment, not that it matters)
Each customer has the option to license parts of the suite, without licensing the whole suite. We only deliver to them the parts of the suite they purchase. This actually has more to do with development, but also we don't want someone using software they haven't licensed.
From a development point of view, our current WPF application is broken up into a handful of .exe files, and dozens of .dll's. We deliver only the .exe/.dll that applies to the license agreement with the individual customer. We do not deliver dll's that are not licensed. The .exe is smart enough to see which are there, and which are not, and dynamically loads these plugins as menu options. From a development point of view, this means we have dozens of C# Projects (most of which only create a tiny .dll). Concurrent development is a breeze. To debug/test our .dlls, we simply start an external program (the main .exe) and debug away.
When I deliver an Angular app, it bundles everything into a really tight fast secure bundle.
Now trying to figure out how to set this up. I have a main Angular application built, but need to be able to build, debug, test and deliver plugins independent of my main application. They really should be separate projects that rely on the main project for common routines, but not sure how to make that work. We only want senior developers working in the main project, we don't want anyone else working in the main project. So we want a different project for each of the plugins. But how do they run and deploy, as they won't own or deploy app.module, app.routing, etc. These plugin projects will be nothing more than just 1 web page and the supporting typescript code, services, etc.
And then once I get this deployed (without app.module, app.routing, etc) how do I get the main site to integrate it in. I assume this is a job for SystemJS, but not exactly sure how to make that work.
If I were doing this with Knockout, this would be a breeze. Angular is far more powerful, so I would assume Angular could do this just as easy.
Here is how I would do this in Knockout. I would have a common library with all of the common features (security, routing, messaging, etc). This library would be referenced in Visual Studio, but not copied into the project.
From a development point of view, each project would be just the web page that deal with the plugin. There would be common functions (features) that are called, and they would be in .js libraries that would be referenced by the project, but not deployed with it.
Upon deployment, I deliver the HTML and .js that goes with this plugin, but nothing else. Once that is dropped into a folder on the customer site, I have a feature on the main site that I would use to 'authorize' or 'register' that page. Then it works fine. I've actually mocked this up and it works perfectly, so I know this deployment method works. I just don't know how to do it within an Angular project structure.