es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Las plantillas de Handlebars no son actualizadas durante la compilación en la carpeta .build.

Situación

En estos momentos estoy desarrollando un proyecto sin servidor que renderiza algunas plantillas HTML (.hbs) con NestJS y Handlebars.
1. Cuando ejecuto por primera vez nest build && sls offline start, puedo probar los endpoints de mi aplicación en modo offline con postman => las plantillas se renderizan perfectamente.
2. Pero si ahora actualizo algo dentro de una plantilla .hbs y luego detengo/reinicio el servidor en modo offline, los cambios en mi plantilla no se tienen en cuenta cuando pruebo mis endpoints (es como si mis plantillas solo se compilaran una vez).
3. Si cambio algo dentro de un archivo .css y luego detengo/reinicio el servidor en modo offline, los archivos compilados parecen ser reemplazados según lo esperado y puedo ver el nuevo CSS en las plantillas renderizadas.

Actualmente, tengo que eliminar la carpeta .build/ y luego detener/reiniciar el servidor en modo offline para ver los cambios de mis plantillas en el HTML renderizado cuando pruebo mis endpoints…

¿Cómo puedo evitar esta solución temporal?

Me gustaría que mis plantillas compiladas se actualizaran al menos cuando solo detengo/reinicio el servidor en modo offline.
Y la mejor solución sería actualizar las plantillas compiladas en “modo observación”, pero leí en algún lugar que las plantillas solo se compilan una vez cuando el servidor se inicia (https://github.com/nest-modules/mailer/issues/42)
Aquí está mi configuración en nest-cli.json:

{
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "assets": ["**/*.hbs"],
    "watchAssets": true
  }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar la solución alternativa de eliminar la carpeta .build/ y reiniciar el servidor para ver los cambios de plantilla, puede probar lo siguiente:

    1. En lugar de usar nest build && sls offline start, use nest start --watch para iniciar su aplicación NestJS en modo de observación. Esto reiniciará automáticamente el servidor cada vez que se realicen cambios en su código, incluidas las plantillas Handlebars.
    2. Si desea que sus plantillas Handlebars se vuelvan a compilar en el modo de observación, puede usar el paquete express-handlebars en lugar del motor Handlebars integrado de NestJS. El paquete express-handlebars admite el modo de observación, por lo que cualquier cambio que realice en sus plantillas se volverá a compilar y representar automáticamente.

    Para usar express-handlebars, debe instalarlo como una dependencia:

    npm install express-handlebars
    

    Luego, en su aplicación NestJS, puede configurar el motor Handlebars para que use express-handlebars en lugar del motor integrado:

    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    import exphbs from 'express-handlebars';
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
    
      // Configurar el motor Handlebars
      app.engine('hbs', exphbs({
        extname: '.hbs',
        layoutsDir: 'views/layouts',
        partialsDir: 'views/partials',
      }));
    
      app.set('view engine', 'hbs');
      app.set('views', 'views');
    
      await app.listen(3000);
    }
    bootstrap();
    

    Con express-handlebars configurado, cada vez que realice cambios en sus plantillas .hbs, se volverán a compilar automáticamente y se representarán cuando actualice su navegador o realice solicitudes API.

Comments are closed.