I read various resources available on this but still couldn't figure out a way. The issue here is that I want to merge two different projects together. My colleague was working on one feature which he designed in AngularJS. I developed my feature using VueJS. The management then decided that both of them should be merged together. As in, From the UI where the first project is launched, there would be a link provided from where my webpages designed in VueJS would launch.
I am running my project locally on VueJS server using npm start
and also using express server as well. But first project only runs node app.js
and it runs in local then.
Below is the screenshot of his project description:
And this is my project details:
My index.html file has these contents:
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Error Details and Description</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div id="app"></div>
<script src="bundle.js"></script>
</body>
</html>
The other index.html contained in first project has code for that link through which my app would launch. The link contains this code which can redirect to my code:
<li><a><i class="fa fa-edit"></i>Administration<span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a href="#!errorinput"><i class="fa fa-database"></i>Manage Error Descriptions</a></li>
The corresponding errorinput.js file contains this code:
'use strict';
app.config(function ($routeProvider) {
$routeProvider
.when("/errorinput", {
templateUrl: "views/errorinput.html"
});
});
app.controller('ErrorInputCtrl', ['$scope', '$http', function ($scope, $http) {
// Implement me!
}]);
Any idea how to merge both of them together to get the required functionality?
EDIT: So I did found a way to run both projects on one server. I included all the dependencies of AngularJS inside my VueJS project. The angular app was running fine but now, the VueJS webpage doesn't comes up along with angularJS. It appears to coming in background when I give relative path of my VueJS app. Any idea how can I now route my VueJS in this bootstrapped AngularJS app? More details about this issue is mentioned here:
It seems like you can try out the cool Micro Frontend. MicroFrontend is a new application paradigm where frontend services are organised as different applications and communicate through an event bus all on the front end.
There are different methods of achieving this like:
postMessage
APISince you said that the applications need not communicate with each other, SPA Framework would be easier for you. It is very mature framework in this domain with support for front end frameworks including Vue and AngularJS but not limited to these options.
What you would do to make this work is effectively create an HTML with different divs:
So that they do not involve changes with each other.
Create a single SPA file as config of your application.
You can find more details on this config Here
After installing the corresponding SPA plugins (
single-spa-vue
andsingle-spa-angular
in your case), we have to tell single-spa the life cycle hooks it needs to mount and unmount your framework.In the case of vue:
You can find a sample application with Vue and Angular Here. Here is a step by step guide from makers of single-spa. Also check out their examples.
Hope that helps.
One solution would be to continue to keep the two features (really applications) separate and divert the user traffic with a Load Balancer. The load balancer can handle and route traffic to the respective application based on configured URL rules. If you are using AWS, you can configure an Application Load Balancer (ALB) using listener rules and target groups.
Even if you aren't using AWS, this type of load balancer can be easily configured. For example with a reverse proxy server on nginx.
The benefit of this approach is that neither application needs to be updated at all, and you don't have to worry about any cross-framework dependencies, issues, etc.
Example:
In each application you can now just use regular href links that can point to the other application. example in App 1:
<a href="/app2/feature1">Feature 1</a>