[Dúvida] Subindo aplicação com Node e React
Fiz uma aplicação chamada teste com uma subpasta chamada backend, com os arquivos de servidor do node js com express, e outra subpasta da pasta teste, chamada frontend, está com os arquivos do react.
Para rodar a aplicação eu tenho que usar dois terminais, um para dar cd backend, npm run backend, e o segundo terminal para cd frontend, npm run start.
Dessa maneira consegui desenvolver em ambiente local minha aplicação de maneira fácil.
Porém ao subir em um servidor de hospedagem, sempre falha o processo de iniciar a aplicação, pesquisando, entendi que o erro é pq precisa digitar cd para mostrar o caminho das pastas onde estão localizados, e que deveria ser um único comando para iniciar a aplicação, em vez de dois, com um para o frontend e o outro para o backend.
Então a minha dúvida é sobre se meu entendimento sobre o processo de subir a aplicação para a internet está correto? Se sim, como eu monto a estrutura de pastas para a aplicação funcionar? Sugestão de artigos ou vídeos que exploram o tema são muito bem vindos, no momento eu estou bastante perdido sobre os próximos passos.
Obs. Sou iniciante em ambos os frameworks, React e Express, mas tenho bastante conhecimento em Javascript, então escrever as funções e componentes foi relativamente fácil.
E estou usando o Render para subir a aplicação.
Se eu entendi o post corretamente você tem uma estrutura assim:
Teste/
-- Backend
-- {content}
-- Frontend
-- {content}
e precisa iniciar ambos manualmente.
Provavelmente a hospedagem espera que quando rode npm run start
o script de start inicialize ambas as dependencias juntas tanto do express quanto do react.
Supondo que esteja tudo corretamente construído, e você tenha um inicializador próprio para cada componente. Porque não criar tipo um arquivo start.js que seria o inicializador.
Dessa forma, você passaria o caminho para ambas as funções de inicialização de forma que ambas iniciem juntas.
const { spawn } = require('child_process');
function startProcess(name, command, args) {
const process = spawn(command, args, { stdio: 'inherit', shell: true });
process.on('close', code => {
console.log(`${name} process exited with code ${code}`);
});
process.on('error', err => {
console.error(`Failed to start ${name} process:`, err);
});
}
startProcess('Backend', 'npm', ['run', 'start', '--prefix', 'backend']);
startProcess('Frontend', 'npm', ['start', '--prefix', 'frontend']);
provavelmente você poderia querer adicionar de forma que cada instancia suba com em um processo diferente.
No meu caso, eu recomendaria fortemente o uso de Docker
ou Podman
, mas como é apenas um teste simples usar esse script de inicialização deve funcionar