Webpack、Vite配置技巧与CI/CD流程搭建全解析

Webpack、Vite配置技巧与CI/CD流程搭建全解析

在现代前端开发中,构建工具配置和自动化部署流程是提升开发效率和项目质量的关键环节。本文将深入探讨Webpack和Vite这两大构建工具的核心配置技巧,并详细介绍CI/CD流程的搭建方法。

一、Webpack核心配置技巧

Webpack作为目前最主流的构建工具,其配置的灵活性既带来了强大的功能,也增加了学习成本。以下是一些关键配置技巧:

  1. 模式选择与环境变量管理
// webpack.config.js
const path = require('path');
const Dotenv = require('dotenv-webpack');module.exports = (env, argv) => {const isProduction = argv.mode === 'production';return {mode: isProduction ? 'production' : 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: isProduction ? '[name].[contenthash].js' : '[name].js'},plugins: [new Dotenv({path: isProduction ? './.env.production' : './.env.development'})]};
};
  1. 性能优化策略
// 配置分割代码
optimization: {splitChunks: {chunks: 'all',cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}},runtimeChunk: 'single'
}// 配置资源压缩
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {optimization: {minimizer: [new TerserPlugin({terserOptions: {compress: {drop_console: true}}})]}
};
  1. Loader与Plugin的最佳实践
// 配置样式处理
module: {rules: [{test: /\.scss$/,use: ['style-loader',{loader: 'css-loader',options: {modules: {localIdentName: '[name]__[local]--[hash:base64:5]'}}},'sass-loader','postcss-loader']}]
}// 配置图片资源处理
{test: /\.(png|jpg|gif)$/i,use: [{loader: 'url-loader',options: {limit: 8192,name: '[name].[hash].[ext]',outputPath: 'images/'}}]
}
二、Vite配置技巧解析

Vite作为新一代构建工具,凭借其极快的冷启动速度和高效的HMR能力,正在被越来越多的项目采用。

  1. 基础配置
// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';export default defineConfig({plugins: [react()],resolve: {alias: {'@': '/src'}},server: {port: 3000,proxy: {'/api': {target: 'http://localhost:8000',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '')}}}
});
  1. 生产环境优化
build: {minify: 'terser',terserOptions: {compress: {drop_console: true,drop_debugger: true}},rollupOptions: {output: {manualChunks(id) {if (id.includes('node_modules')) {return id.toString().split('node_modules/')[1].split('/')[0].toString();}}}}
}
  1. 插件生态系统
// 使用vite-plugin-html进行HTML优化
import { createHtmlPlugin } from 'vite-plugin-html';export default defineConfig({plugins: [react(),createHtmlPlugin({minify: true,inject: {data: {title: 'My Vite App',injectScript: `<script src="./inject.js"></script>`}}})]
});
三、CI/CD流程搭建详解

CI/CD(持续集成/持续部署)是现代软件开发中的重要实践,能够大幅提升团队协作效率和软件交付质量。

  1. GitHub Actions实现CI流程
# .github/workflows/ci.yml
name: CIon:push:branches: [ main ]pull_request:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Set up Node.jsuses: actions/setup-node@v3with:node-version: 18- name: Install dependenciesrun: npm ci- name: Lintrun: npm run lint- name: Testrun: npm test- name: Buildrun: npm run build
  1. 配置CD流程部署到AWS S3
# .github/workflows/cd.yml
name: CDon:push:branches: [ main ]jobs:deploy:runs-on: ubuntu-latestneeds: buildsteps:- uses: actions/checkout@v3- name: Set up Node.jsuses: actions/setup-node@v3with:node-version: 18- name: Install dependenciesrun: npm ci- name: Buildrun: npm run build- name: Deploy to S3uses: jakejarvis/s3-sync-action@v0.5.1with:args: --acl public-read --deleteenv:AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}AWS_REGION: 'us-east-1'SOURCE_DIR: 'dist'
  1. Docker化部署方案
# Dockerfile
FROM node:18 as buildWORKDIR /appCOPY package*.json ./RUN npm ciCOPY . .RUN npm run buildFROM nginx:1.21-alpineCOPY --from=build /app/dist /usr/share/nginx/htmlCOPY nginx.conf /etc/nginx/conf.d/default.confEXPOSE 80CMD ["nginx", "-g", "daemon off;"]
四、最佳实践与常见问题解决方案
  1. 构建性能优化
  • 使用cache缓存依赖和构建产物
  • 对大型项目采用增量构建策略
  • 合理配置并行处理
  1. CI/CD流程优化
  • 分离测试阶段,优先执行快速测试
  • 实现自动化回滚机制
  • 配置构建状态通知系统
  1. 常见问题解决
  • 依赖冲突:使用resolutions字段锁定依赖版本
  • 构建失败:添加详细的错误日志收集
  • 部署故障:实现蓝绿部署或金丝雀发布

通过合理配置Webpack和Vite,并搭建完善的CI/CD流程,可以显著提升前端项目的开发体验和交付质量。建议根据项目规模和需求选择合适的构建工具,并持续优化自动化流程以适应不断变化的开发需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91002.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入npm install后发生了什么

一、准备阶段&#xff1a;配置与环境检查读取配置优先级npm install 首先加载多层级的配置&#xff08;优先级从高到低&#xff09;4&#xff1a;项目级 .npmrc用户级 .npmrc&#xff08;如 ~/.npmrc&#xff09;全局 npmrcnpm 内置默认配置可通过 npm config ls -l 查看所有配…

SpringBoot集成Redis、SpringCache

1 Redis介绍 1.1 Redis作为缓存 由于Redis的存取效率非常高,在开发实践中,通常会将一些数据从关系型数据库(例如MySQL)中读取出来,并写入到Redis中,后续当需要访问相关数据时,将优先从Redis中读取所需的数据,以此,可以提高数据的读取效率,并且对一定程度的保护关系型…

静态路由综合配置实验报告

一、实验拓扑二、实验需求1.除了R5的环回地址固定5.5.5.0/24&#xff0c;其他网段基于192.168.1.0/24进行合理划分&#xff1b;2.R1-R4每个路由器存在两个环回接口&#xff0c;模拟PC&#xff0c;地址也在192.168.1.0/24网络内&#xff1b;3.R1-R4不能直接编写到达5.5.5.0/24的…

【一起来学AI大模型】PyTorch DataLoader 实战指南

DataLoader 是 PyTorch 中处理数据的核心组件&#xff0c;它提供了高效的数据加载、批处理和并行处理功能。下面是一个全面的 DataLoader 实战指南&#xff0c;包含代码示例和最佳实践。基础用法&#xff1a;简单数据加载import torch from torch.utils.data import Dataset, D…

SpringBoot单元测试类拿不到bean报空指针异常

原代码package com.atguigu.gulimall.product;import com.aliyun.oss.OSSClient; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; impo…

持续集成 简介环境搭建

1. 持续集成简介 1.1 持续集成的作用 随着互联网的蓬勃发展,软件生命周期模型也经历了几个比较大的阶段,从最初的瀑布模型,到 V 模型,再到现在的敏捷或者 devops,不论哪个阶段,项目从立项到交付几乎都离不开以下几个过程,开发、构建、测试和发布,而且一直都在致力于又…

关于 java:11. 项目结构、Maven、Gradle 构建系统

一、Java 项目目录结构标准1.1 Java 项目标准目录结构总览标准 Java 项目目录结构&#xff08;以 Maven / Gradle 通用结构为基础&#xff09;&#xff1a;project-root/ ├── src/ │ ├── main/ │ │ ├── java/ # 主业务逻辑代码&#xff08;核心…

大数据的安全挑战与应对

在大数据时代&#xff0c;大数据安全问题已成为开发者最为关注的核心议题之一。至少五年来&#xff0c;大数据已融入各类企业的运营体系&#xff0c;而采用先进数据分析解决方案的组织数量仍在持续增长。本文将明确当前市场中最关键的大数据安全问题与威胁&#xff0c;概述企业…

PostgreSQL ERROR: out of shared memory处理方式

系统允许的总锁数 SELECT (SELECT setting::int FROM pg_settings WHERE name max_locks_per_transaction) * (SELECT setting::int FROM pg_settings WHERE name max_connections) (SELECT setting::int FROM pg_settings WHERE name max_prepared_transactions);当锁大于…

Django 模型(Model)

1. 模型简介 ORM 简介 MVC 框架中一个重要的部分就是 ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。即直接面向对象操作数据,无需考虑 sql 语句。 ORM 是“对象-关系-映射”的简称,主要任务是:…

深入解析Hadoop RPC:技术细节与推广应用

Hadoop RPC框架概述在分布式系统的核心架构中&#xff0c;远程过程调用&#xff08;RPC&#xff09;机制如同神经网络般连接着各个计算节点。Hadoop作为大数据处理的基石&#xff0c;其自主研发的RPC框架不仅支撑着内部组件的协同运作&#xff0c;更以独特的工程哲学诠释了分布…

为什么玩游戏用UDP,看网页用TCP?

故事场景&#xff1a;两种不同的远程沟通方式假设你需要和远方的朋友沟通一件重要的事情。方式一&#xff1a;TCP — 打一个重要的电话打电话是一种非常严谨、可靠的沟通方式。• 1. 建立连接 (三次握手):• 你拿起电话&#xff0c;拨号&#xff08;SYN&#xff09;。• 朋友那…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(二)

High-Fidelity Texture Transfer Using Multi-Scale Depth-Aware Diffusion 这篇文章可以从一个带有纹理的几何物体出发&#xff0c;将其身上的纹理自动提取并映射到任意的几何拓扑结构上&#xff08;见下图红线左侧&#xff09;&#xff1b;或者从一个白模几何对象出发&#x…

深度学习图像分类数据集—玉米粒质量识别分类

该数据集为图像分类数据集&#xff0c;适用于ResNet、VGG等卷积神经网络&#xff0c;SENet、CBAM等注意力机制相关算法&#xff0c;Vision Transformer等Transformer相关算法。 数据集信息介绍&#xff1a;玉米粒质量识别分类&#xff1a;[crush, good, mul] 训练数据集总共有3…

Unity VR手术模拟系统架构分析与数据流设计

Unity VR手术模拟系统架构分析与数据流设计 前言 本文将深入分析一个基于Unity引擎开发的多人VR手术模拟系统。该系统采用先进的网络架构设计&#xff0c;支持多用户实时协作&#xff0c;具备完整的手术流程引导和精确的工具交互功能。通过对系统架构和数据管道的详细剖析&…

【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册

Spring Boot 4.0 的颠覆性AI特性全景解析&#xff0c;结合智能编码实战案例、底层架构革新及Prompt工程手册一、Spring Boot 4.0 核心AI能力矩阵二、AI智能编码插件实战&#xff08;Spring AI Assistant&#xff09;1. 安装与激活2. 实时代码生成场景3. 缺陷预测与修复三、AI引…

audiobookshelf-web 项目怎么运行

git clone https://github.com/audiobookshelf/audiobookshelf-web.git cd audiobookshelf-web npm i 启动项目 npm run dev http://localhost:3000/

扫描文件 PDF / 图片 纠斜 | 图片去黑边 / 裁剪 / 压缩

问题&#xff1a;扫描后形成的 PDF 或图片文档常存在变形倾斜等问题&#xff0c;手动调整颇为耗时费力。 一、PDF 纠斜 - Adobe Acrobat DC 1、所用功能 扫描和 OCR&#xff1a; 识别文本&#xff1a;在文件中 → 设置 确定后启动扫描&#xff0c;识别过程中自动纠偏。 2、…

适配器模式:兼容不兼容接口

将一个类的接口转换成客户端期望的另一个接口&#xff0c;解决接口不兼容问题。代码示例&#xff1a;// 目标接口&#xff08;客户端期望的格式&#xff09; interface ModernPrinter {void printDocument(String text); }// 被适配的旧类&#xff08;不兼容&#xff09; class…

流程控制:从基础结构到跨语言实践与优化

流程控制 一、流程控制基础概念与核心价值 &#xff08;一&#xff09;流程控制定义与本质 流程控制是通过特定逻辑结构决定程序执行顺序的机制&#xff0c;核心是控制代码运行路径&#xff0c;包括顺序执行、条件分支、循环迭代三大核心逻辑。其本质是将无序的指令集合转化为有…