3

I have a Laravel application that is hosted on Heroku and serves multiple Javascript games from a single domain. Everything is contained in a single Git repo. The back-end application provides OAuth and other features that are shared by all of the games. Each game is a standalone React app with its own separate node_modules folder. The folder structure looks like this:

├── package.json
├── node_modules
└── games/
    └── checkers/
        ├── package.json
        └── node_modules
    └── chess/
        ├── package.json
        └── node_modules
    └── mahjongg/
        ├── package.json
        └── node_modules
└── public/
    ├── app-compiled.json
    └── games/
        └── checkers/
            └── app-compiled.js
        └── chess/
            └── app-compiled.js
        └── mahjongg/
            └── app-compiled.js

Each time I push a new version of this up to Heroku, I need to run a separate build command to compile the main web application and each of the separate React games. Basically, this is what needs to happen:

npm install
npm run production
cd games/checkers
npm install
npm run production
cd ../chess
npm install
npm run production
cd ../mahjongg
npm install
npm run production

Those commands will compile the React games and place each one under public/games/{slug}/app-compiled.js where they can be served by the common web application.

I already tried adjusting the heroku-postbuild script in my main package.json file to look like this:

"heroku-postbuild": "npm run production && cd games/checkers && npm install && npm run production && cd ../chess && npm install && npm run production && cd ../mahjongg && npm install && npm run production"

That actually works, but I'm worried that it might break at some point in the future as the build process gets bigger and more complex. Is there a better, more supported way to accomplish what I'm trying to do here?

Note that I am not open to the idea of running a separate Heroku dyno for each React app. I am eventually going to have about 30 games, and it would be cost-prohibitive to run each on a separate dyno.

Derrick Miller
  • 1,860
  • 3
  • 21
  • 37

0 Answers0