通过vercel / ncc 编译 nestjs ,渲染引擎丢失问题。

849 阅读1分钟

背景:

最近在使用 ncc 打包编译nestjs,由于nestjs 使用hbs 作为模版引擎。

原先官网样例:


npm install --save hbs


import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(
    AppModule,
  );

  app.useStaticAssets(join(__dirname, '..', 'public'));
  app.setBaseViewsDir(join(__dirname, '..', 'views'));
   //直接使用设置模版
  app.setViewEngine('hbs');

  await app.listen(3000);
}
bootstrap();

这样通过ncc 编译,会存在丢失问题

如何解决

因此做如下设置即可:


import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
import { AppModule } from './app.module';
import * as HBS from 'hbs';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(
    AppModule,
  );
  app.useStaticAssets(join(__dirname, '..', 'public'));
  app.setBaseViewsDir(join(__dirname, '..', 'views'));
    //手动重写
  app.set('view engine', 'hbs');
  app.engine('hbs', HBS.__express);

  await app.listen(3000);
}
bootstrap();

通过将其引入,再次编译即可。

项目地址:github.com/tansincosy/…