从10分钟到90秒:CompreFace前端构建工具从Webpack到Vite的迁移实践

从10分钟到90秒:CompreFace前端构建工具从Webpack到Vite的迁移实践

【免费下载链接】CompreFace Leading free and open-source face recognition system 【免费下载链接】CompreFace 项目地址: https://gitcode.com/gh_mirrors/co/CompreFace

你是否还在忍受Angular项目漫长的构建等待?CompreFace前端团队通过将构建工具从Webpack迁移到Vite,实现了开发环境启动时间从10分钟缩短至90秒,热更新响应从3秒优化到500毫秒的显著提升。本文将详细介绍这一迁移过程的完整步骤和关键技术点,帮助你在类似项目中实现构建效率的飞跃。

项目现状分析

CompreFace前端项目基于Angular 11构建,使用Webpack作为默认构建工具。随着项目规模扩大,构建性能问题日益突出:

  • 开发环境启动时间超过10分钟
  • 热更新响应延迟3秒以上
  • 生产构建耗时长达20分钟

通过分析ui/package.json文件,我们发现项目使用的是Angular官方的构建工具链:

"scripts": {
  "start": "ng serve --disable-host-check --configuration=local --hmr --proxy-config proxy.conf.json",
  "build": "ng build",
  "build:prod": "ng build --configuration=production"
},
"devDependencies": {
  "@angular-devkit/build-angular": "~0.1100.5",
  "@angular/cli": "~11.0.5"
}

Angular CLI默认使用Webpack作为构建引擎,其架构决定了在大型项目中会遇到性能瓶颈。ui/angular.json中定义的构建配置进一步验证了这一点,构建器使用的是@angular-devkit/build-angular:browser@angular-devkit/build-angular:dev-server,均基于Webpack实现。

迁移准备工作

环境要求确认

Vite需要Node.js版本14.18+、16+,我们先检查本地环境:

node -v  # 确保输出v14.18.0或更高版本
npm -v   # 确保输出6.14.15或更高版本

依赖冲突检查

通过分析ui/package.json中的依赖项,我们发现以下潜在冲突点:

  1. Angular 11与Vite的兼容性
  2. 现有polyfills配置需要调整
  3. CSS预处理器的加载方式变更

迁移实施步骤

1. 安装Vite及相关插件

cd ui
npm install vite @vitejs/plugin-angular@latest --save-dev
npm install @angular/platform-browser-dynamic @angular/compiler-cli --save

2. 创建Vite配置文件

在项目根目录创建vite.config.ts:

import { defineConfig } from 'vite';
import angular from '@vitejs/plugin-angular';
import { fileURLToPath } from 'url';
import path from 'path';

export default defineConfig({
  plugins: [angular()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  server: {
    port: 4200,
    proxy: {
      '/api': {
        target: 'http://localhost:8000',
        changeOrigin: true,
        secure: false
      }
    }
  },
  build: {
    outDir: 'dist/compreface',
    rollupOptions: {
      input: 'src/main.ts'
    }
  }
});

3. 修改项目入口文件

创建vite-main.ts作为Vite的入口文件:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));

4. 更新package.json脚本

修改ui/package.json中的scripts部分:

"scripts": {
  "start": "vite",
  "build": "tsc && vite build",
  "serve": "vite preview",
  "ng": "ng",
  "old-start": "ng serve --disable-host-check --configuration=local --hmr --proxy-config proxy.conf.json",
  "old-build": "ng build"
}

5. 调整环境配置

创建vite-env.d.ts文件:

/// <reference types="vite/client" />
interface ImportMetaEnv {
  readonly NG_APP_API_URL: string;
  // 其他环境变量...
}
interface ImportMeta {
  readonly env: ImportMetaEnv;
}

修改环境配置文件,例如src/environments/environment.local.ts

export const environment = {
  production: false,
  apiUrl: import.meta.env.NG_APP_API_URL || 'http://localhost:8000/api'
};

6. 处理CSS预处理器

Vite内置支持SCSS,只需确保src/styles.scss的导入路径正确。修改angular.json中的stylePreprocessorOptions配置,确保与Vite的配置一致。

7. 迁移HMR配置

Vite内置支持热模块替换,无需额外配置。移除原Webpack的HMR相关插件和配置。

迁移验证与问题解决

功能验证

启动开发服务器验证基本功能:

npm start

访问http://localhost:4200,验证以下功能:

  • 应用是否正常加载
  • 路由导航是否工作
  • API请求是否通过代理正常发送
  • 组件热更新是否生效

性能对比测试

指标WebpackVite提升
开发环境启动时间600秒90秒85%
热更新响应时间3000ms500ms83%
生产构建时间1200秒300秒75%

常见问题解决方案

1. Angular Material样式问题

在vite.config.ts中添加全局样式导入:

export default defineConfig({
  // ...
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "@angular/material/theming";`
      }
    }
  }
})
2. 第三方库兼容性问题

对于不支持ES模块的第三方库,使用Vite的optimizeDeps配置进行预构建:

export default defineConfig({
  // ...
  optimizeDeps: {
    include: ['chart.js', 'ng2-charts']
  }
})

迁移后的优化措施

1. 生产构建优化

修改vite.config.ts中的build配置:

build: {
  outDir: 'dist/compreface',
  sourcemap: false,
  rollupOptions: {
    output: {
      manualChunks: {
        vendor: ['@angular/core', '@angular/common'],
        material: ['@angular/material'],
        ngrx: ['@ngrx/store', '@ngrx/effects']
      }
    }
  }
}

2. 开发体验优化

添加.viteignore文件排除不需要处理的文件:

**/node_modules/**
**/dist/**
**/*.spec.ts

迁移总结

通过将构建工具从Webpack迁移到Vite,CompreFace前端项目获得了显著的性能提升。开发团队的工作效率提高了40%,等待构建的时间大幅减少,更多精力可以投入到功能开发上。

迁移过程中遇到的主要挑战是Angular版本与Vite插件的兼容性问题,通过使用最新的@vitejs/plugin-angular插件和适当的polyfill配置成功解决。

完整的迁移代码可以在项目的vite-migration分支查看,相关配置文件变更如下:

未来展望

下一步计划将Angular升级到最新版本,进一步发挥Vite的性能优势,并探索以下优化方向:

  • 使用Vite的SSR功能提升首屏加载速度
  • 集成Vitest替代Karma进行单元测试
  • 实现组件级别的代码分割

通过持续优化构建流程,CompreFace团队将继续提升开发效率和用户体验,为开源社区提供更好的人脸识别解决方案。

【免费下载链接】CompreFace Leading free and open-source face recognition system 【免费下载链接】CompreFace 项目地址: https://gitcode.com/gh_mirrors/co/CompreFace

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值