This is a single-spa example React microapp.
NOTE. This application have been configured to be run as child app of a single-spa application. So while this app can be deployed and run independently, we would need some frame single-spa which would load it. While technically we can achieve running this app as standalone app it's strongly not recommended by the author of the
single-spa
approch, see this GitHub Issue for details.
- node - v10.22.1
- npm - v6.14.6
Command | Description |
---|---|
npm start |
Run server which serves production ready build from dist folder |
npm run dev |
Run app in the development mode and dev config |
npm run dev-https |
Run app in the development mode and dev config using HTTPS protocol |
npm run prod |
Run app in the development mode and prod config |
npm run build |
Build app for production and puts files to the dist folder, default to development mode and dev config |
npm run analyze |
Analyze dependencies sizes and opens report in the browser |
npm run lint |
Check code for lint errors |
npm run format |
Format code using prettier |
npm run test |
Run unit tests |
npm run watch-tests |
Watch for file changes and run unit tests on changes |
npm run coverage |
Generate test code coverage report |
Inside the project folder run:
nvm use 10.22.1;
- to use npm version: 10.22.1npm i
- install dependenciesnpm run dev
- run app indevelopment
mode anddev
config, currently it is using the config fromdefault.js
- As this app can be loaded only inside a frame single-spa, you have to run a
micro-frontends-frame
frame app and configure it to use the URLhttp://localhost:8008/earn-app/topcoder-micro-frontends-earn-app.js
.
-
The setup is assuming you have setup the
micro-frontends-frame
andmicro-frontends-nav-app
. And this is also assuming your have a new MFE namedanother-app
and your local url ishttp://localhost:8099/another-app/topcoder-micro-frontends-another-app.js
-
You have launched existing
micro-frontends-challenges-app
andmicro-frontends-gigs-app
in your local envrionment. -
Modify the
config/dev.js
by incorporating the module mapping, so it might be look like this if you setup all them in local environment:
module.exports = {
MFE_CONFIG: {
'@topcoder/micro-frontends-another-app': 'http://localhost:8099/another-app/topcoder-micro-frontends-another-app.js',
'@topcoder/micro-frontends-challenges-app': 'http://localhost:8009/challenges-app/topcoder-micro-frontends-challenges-app.js',
'@topcoder/micro-frontends-gigs-app': 'http://localhost:8010/gigs-app/topcoder-micro-frontends-gigs-app.js',
}
};
-
In the
src/containers/Menu/index.jsx
, you can modify it to add your newanother-app
menu link, challenges-app and gigs-app menu links have already been setup as reference. -
In the
set-public-path.js
file, add the mapping to youranother-app
, challenges-app and gigs-app have already been setup as the reference. -
In the
src/App.jsx
file, add the application mount point inside the<Router>
component, challenges-app and gigs-app have already been setup as the reference -
Edit your
hosts
file by mapping127.0.0.1 local.topcoder-dev.com
-
Now visit
http://local.topcoder-dev.com:8080/earn/find/challenges
to view themicro-frontends-challenges-app
npm i
- install dependenciesAPPMODE=production APPENV=prod npm run build
- build code todist/
folder- Now you can host
dist/
folder using any static server. For example, you may run a simpleExpress
server by runningnpm start
.
Make sure you have Heroky CLI installed and you have a Heroku account. And then inside the project folder run the next commands:
-
If there is not Git repository inited yet, create a repo and commit all the files:
git init
git add .
git commit -m'inital commit'
-
heroku apps:create
- create Heroku app -
git push heroku master
- push changes to Heroku and trigger deploying -
Now you have to configure frame app to use the URL provided by Heroku like
https://<APP-NAME>.herokuapp.com/earn-app/topcoder-micro-frontends-earn-app.js
to load this microapp.