Estoy tratando de contener mi aplicación React con la ventana acoplable y ahora estoy un poco atascado con el archivo server.js porque no sé cómo "implementar" la aplicación en su interior. Pude simplemente mostrar un "Hola mundo", pero parece que no puedo ejecutar la aplicación interna.
Inicialmente, mi idea era que podía usar el archivo index.js como punto de entrada y usarlo en "res.end(x)", ya que este era el lugar donde simplemente podía ingresar "Hello World".
¿Me estoy perdiendo algo pequeño o mi enfoque general es incorrecto?
Mi archivo server.js tiene el siguiente aspecto:
const http= require('http'); const fs = require('fs'); const index = fs.readFileSync('index.js'); let app = http.createServer((req, res) => { res.writeHead(200,{'Content-Type': 'text/plain'}); res.end(index); }); app.listen(9030, '0.0.0.0'); console.log('Node server running on port 9030')Comparto con ustedes esta mejor documentación: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
React generalmente está codificado en archivos .jsx , que deben compilarse/transpilarse a Javascript normal. Una vez hecho esto, puede servir estos archivos a los navegadores web de la forma que desee.
La compilación/transpilación de React se realiza mediante Webpack o Parcel . Si está usando Create-React-App, entonces está usando Webpack bajo el capó. CRA npm start ejecutará un servidor de desarrollo de Webpack, y npm run build colocará todos los archivos que necesita en su directorio de compilación. Deberías hacer esto último si quieres
La mayoría de los tutoriales, incluido el vinculado en los comentarios , sugieren usar el servidor de desarrollo Webpack (también conocido como npm start ) para ejecutar su servidor en Docker. que no es recomendable. No solo consume más recursos para ejecutarse, sino que la compilación de desarrollo se ejecutará más lentamente en los navegadores que la compilación de producción. El servidor de desarrollo tampoco está diseñado para manejar cargas pesadas.
build para producción, con un servidor real Use npm run build para generar los archivos de compilación en el directorio de build , luego use un servidor web real para servirlos al mundo.
Puede encontrar un ejemplo en Docker, usando Nginx para servir los archivos, aquí
Alternativamente, el comando de compilación de CRA en sí mismo ofrece una pista útil:
La carpeta de compilación está lista para implementarse. Puede servirlo con un servidor estático:
npm install -g servicio
servir -s construir
Esto funcionará en un contenedor de Docker Node. Un ejemplo de un Dockerfile muy no optimizado podría verse así
FROM node:16-alpine COPY . . RUN npm install RUN npm build RUN npm install -D serve CMD ["./node_modules/.bin/serve", "-s", "build"] El proceso de compilación se puede mejorar aquí para aprovechar el caché (primero copiando package.json y package-lock.json e instalando antes de copiar el código, vea el ejemplo al final de la respuesta aquí ), y todos los comandos RUN combinados