Installing dependencies for sub directories

ghostorder28HOBBY

a year ago

My project have this structure

root/
  ├── client/ (React app)
  |     ├── .env
  |     ├── .package.json
  |     └── src/
  ├── server/ (Node server)
  |     ├── .env
  |     ├── .package.json
  |     └── src/
  └── package.json

To run it successfully one have to:

  1. install dependencies for both client and server.

  2. build the client.

  3. start the server

In the root's package.json I have this script to install client and server dependencies:

"install": "npm install --prefix client & npm install --prefix server"

In local development this works, dependencies both for client first and then server are installed, although the process doesn't exit on its own, I have to manually press Ctrl-C, but then all the next steps work just fine and I can run the application as expected.

However when deploy it to railway although it installs the dependencies it fails at the next step (build) because it cannot find both react-script and rimraf, which are necessary to run the build script, which leds me to think that it is not installing the dependencies correctly

how can I tell railway to install dependencies for client/ and server/?

0 Replies

ghostorder28HOBBY

a year ago

80b7a72a-2271-48a0-8bc9-a5758f24c847


a year ago

are you able to share the repo?


ghostorder28HOBBY

a year ago


a year ago

do the client and server import stuff from one another?


ghostorder28HOBBY

a year ago

no imports, just the build script in the client's package.json removes and creates a directory in server


a year ago

so the server serves the client app?


ghostorder28HOBBY

a year ago

yep, client basically just build the frontend files into a public/ dir that is located inside server/ and then the server can serve those static files


a year ago

interesting approach


a year ago

can you send me your latest build logs please -


ghostorder28HOBBY

a year ago

well before I had both on separated repos, but then I always ended duplicating the commit messages for both, since every change in the client repo forces also an update in the server repo because it serves the static files generated by create-react-app in client xD


ghostorder28HOBBY

a year ago

sure let me check the link


a year ago

interesting in that the server is serving the client, not that you have both apps in one repo because that part is normal. in my experience its best to have the client (or frontend) serve itself and the backend serve itself (for lack of a better term)


ghostorder28HOBBY

a year ago

oh mmm, yeah certainly that's another common approach


ghostorder28HOBBY

a year ago


a year ago

try adding a nixpacks.toml to your project with this in it -

[phases.install]
  cmds = ['npm run install']

ghostorder28HOBBY

a year ago

ok


ghostorder28HOBBY

a year ago

it failed again with the same error, rimraf and react-scripts not found


a year ago

new build logs please


ghostorder28HOBBY

a year ago

oh right, sorry


ghostorder28HOBBY

a year ago


a year ago

then i might recommend moving to npm workspaces, it would help here


ghostorder28HOBBY

a year ago

I see, well thank you for your time brody, I will read more about that


ghostorder28HOBBY

a year ago

or maybe I just go with the more common approach you mentioned 😅


a year ago

haha that too


ghostorder28HOBBY

a year ago

I don't know why but I just completely forgot that the client having its own little sever to serve just the build files is a thing xD


a year ago

and thats easily achievable with the nixpacks.toml and Caddyfile from this repo


ghostorder28HOBBY

a year ago

oh, I was thinking in creating a barebones nodejs server inside the client and serve the build files through it


a year ago

thats also not ideal


a year ago

its best to use a web server as a web server, and node for node stuff


ghostorder28HOBBY

a year ago

well that's right


ghostorder28HOBBY

a year ago

I will read more on nix and cady, thank you


a year ago

you would only need to read about it if you want to learn more, those two files are drag and drop


ghostorder28HOBBY

a year ago

yep, I always try to know understand at least the basics of the technology I use in my apps so I can customize it when I needed or have some notion of where to look at


ghostorder28HOBBY

a year ago

but having an easy quick start helps


a year ago

love that attitude


ghostorder28HOBBY

a year ago

hehe, I guess being self taught helped to build it


a year ago

for sure


Installing dependencies for sub directories - Railway Help Station