Skip to content

nestjs使用swc加速编译

步骤

  1. src目录下创建generate-metadata.ts,内容为
ts
import { writeFileSync } from 'fs'
import { join } from 'path'
import { PluginMetadataGenerator } from '@nestjs/cli/lib/compiler/plugins/plugin-metadata-generator'
import { ReadonlyVisitor } from '@nestjs/swagger/dist/plugin'

const tsconfigPath = 'tsconfig.build.json'
const srcPath = join(__dirname, '..', 'src') // 都使用绝对路径防止执行时,找不到文件
const metadataPath = join(srcPath, 'metadata.ts')

// 如果本地没有metadata.ts文件,则创建一个默认的。不然这个脚本执行会报错
const defaultContent = `export default async () => { return {}; };`
writeFileSync(metadataPath, defaultContent, 'utf8')

const generator = new PluginMetadataGenerator()
generator.generate({
    visitors: [new ReadonlyVisitor({ introspectComments: true, pathToSource: srcPath })],
    outputDir: __dirname,
    tsconfigPath,
    // watch: true, // 如果需要开启监听
})
  1. package.json里添加脚本
json
"scripts": {
    "generate-metadata": "ts-node ./src/generate-metadata.ts",
},

并执行pnpm generate-metadata,脚本会在src下生成metadata.ts文件

  1. main.ts文件里导入metadata.ts
ts
import metadata from './metadata'

...
await SwaggerModule.loadPluginMetadata(metadata); // 还需要添加这一行
const document = SwaggerModule.createDocument(app, config);
  1. nest-cli.json里添加
json
 "compilerOptions": {
        "builder": "swc",
        "typeCheck": true,  // swc不具备检测类型功能。所以需要自己开启类型检测
}

配置完后,nestjs将用swc进行编译

  1. 最后,运行项目启动即可

苏ICP备20040768号