NestJs系列之使用Vite搭建项目

介绍

在使用nest创建项目时,默认使用webpack进行打包,有时候启动项目需要1-2分钟。所以希望采用vite进行快速启动项目进行开发。

本文主要使用NestJs、Vite和swc进行配置。文章实操较多,概念性的东西可访问对应的官方文档进行了解。tips: 个人认为概念性的东西,在文章中指出。对熟悉的人来说直接就实操,节省时间。感兴趣的小伙伴探索性去了解,提升学习乐趣

概念

  1. 什么是NestJS?

官方地址: NestJS - A progressive Node.js framework

中文地址: NestJS 简介 | NestJS 中文文档 | NestJS 中文网 (bootcss.com)

个人理解: NodeJS的Spring Boot. 结合了面向对象,函数式编程和依赖注入的理念,使用NodeJS 搭建后端应用程序。

联想: express、egg、Spring Boot

  1. 什么是Vite?
    官方地址: Vite | Next Generation Frontend Tooling (vitejs.dev)
    中文地址: Vite | 下一代的前端工具链 (vitejs.dev)
  2. 什么是swc?
    官方地址:Rust-based platform for the Web -- SWC

实操

创建项目

参考NestJS 官网

执行命令:

复制代码
$ npm i -g @nestjs/cli
$ nest new project-name

安装完成之后目录结构如下:

在项目的根目录下运行项目

在浏览器上输入localhost:3000可以看到项目的输出:Hello World

安装Vite

复制代码
pnpm add vite vite-plugin-node -D

配置Vite

参考VitePluginNode配置

复制代码
export default defineConfig({
  server: {
    port: 3000,
  },
  plugins: [
    ...VitePluginNode({
      // NodeJs 原生请求适配器
      // 支持'express', 'nest', 'koa' 和 'fastify',
      adapter: 'nest',

      // 项目入口文件
      appPath: './src/main',

      // 在项目入口文件中导出的名字
      exportName: 'appServer',

      // 编译方式: esbuild 和 swc,
      // 默认 esbuild. 但esbuild 不支持 'emitDecoratorMetadata'
      // 使用swc需要安装 `@swc/core`
      tsCompiler: 'swc',
    }),
  ],
  optimizeDeps: {
    exclude: [
        '@nestjs/microservices',
        '@nestjs/websockets',
        'cache-manager', 
        'class-transformer',
        'class-validator', 
        'fastify-swagger'
    ],
  },
});

修改入口文件

复制代码
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

if (import.meta.env.PROD) {
  async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    await app.listen(3000);
  }
  bootstrap();
}
export const appServer = NestFactory.create(AppModule);

问题总结

  1. 无法识别import.meta

    解决方案:修改tsconfig.json

  2. 无法识别env

    解决方案:可参考vite官网添加env.d.ts

    复制代码
    /// <reference types="vite/client" />
    interface ImportMetaEnv {
      readonly VITE_APP_TITLE: string;
      // more env variables...
    }
    interface ImportMeta {
      readonly env: ImportMetaEnv;
    }
相关推荐
天渺工作室5 天前
别再写改名脚本了,一个 Vite 插件搞定压缩、校验、自动哈希命名vite-plugin-pack-orchestrator
前端·vite
Sheldon一蓑烟雨任平生7 天前
Vite 深度剖析(四)
性能优化·vite·图片压缩·gzip压缩·代码压缩·摇树·dns-prefetch
Sheldon一蓑烟雨任平生7 天前
Vite 深度剖析(二)
vite·静态资源处理·hmr·css工程化处理·模块热替换·vite 插件
Sheldon一蓑烟雨任平生7 天前
Vite 深度剖析(一)
vue·react·vite·环境变量·esbuild·vite.config.ts·依赖预构建
yuanlaile8 天前
NestJS实战商城与云原生落地指南
云原生·nestjs·nestjs学习指南
walking9579 天前
Vite 打包优化终极指南:从 30MB 到 800KB 的性能飞跃
前端·vue.js·vite
whyfail10 天前
CVE-2026-39363-Vite开发服务器安全漏洞深度分析
安全·vite
江上清风山间明月10 天前
Vite现代化的前端构建工具详解
前端·webpack·nodejs·vite
发现一只大呆瓜13 天前
深入浅出 Tree Shaking:Rollup 是如何“摇”掉死代码的?
前端·性能优化·vite
发现一只大呆瓜13 天前
深度起底 Vite:从打包流程到插件钩子执行时序的全链路解析
前端·vite