首页 > 其他分享 >Webpack 项目构建与优化指南

Webpack 项目构建与优化指南

时间:2024-11-03 22:52:07浏览次数:3  
标签:指南 配置 webpack ts Webpack base 构建 import

文章目录

Webpack 项目构建与优化指南

简介

在现代前端开发中,Webpack 是一个不可或缺的模块打包工具,它能够将项目中的各种资源(如 JS、CSS、图片等)打包成浏览器可以识别的格式。本文将带你从零开始,一步步构建一个基于 Webpack 的项目,并进行必要的优化,以提高构建效率和运行性能。

一、创建基本项目

1. 初始化项目

首先,我们需要创建一个项目目录,并在其中初始化 package.json 文件:

mkdir my-webpack-project
cd my-webpack-project
npm init -y

2. 创建项目结构

在项目根目录下,创建基本的项目结构:

my-webpack-project
│
├── public
│   └── index.html
├── src
│   ├── index.tsx
│   └── App.tsx
├── build
│   ├── webpack.base.ts
│   ├── webpack.dev.ts
│   └── webpack.prod.ts
└── package.json

3. 引入 React 和 TypeScript

安装 React 和 TypeScript 相关依赖:

npm install react react-dom
npm install @types/react @types/react-dom -D
npm install typescript -D

二、Webpack 配置

1. 基础配置

创建 webpack.base.ts,配置基础的 Webpack 选项:

import { Configuration } from 'webpack';
import path from 'path';

const baseConfig: Configuration = {
  entry: path.join(__dirname, '../src/index.tsx'),
  output: {
    filename: 'static/js/[name].js',
    path: path.join(__dirname, '../dist'),
    clean: true,
    publicPath: '/',
  },
  module: {
    rules: [],
  },
  resolve: {
    extensions: ['.tsx', '.ts', '.jsx', '.js'],
  },
  plugins: [],
};

export default baseConfig;

2. 开发环境配置

创建 webpack.dev.ts,配置开发环境特有的选项:

import { merge } from 'webpack-merge';
import baseConfig from './webpack.base';

const devConfig = merge(baseConfig, {
  mode: 'development',
  devtool: 'eval-cheap-module-source-map',
  // ...其他开发环境配置
});

export default devConfig;

3. 生产环境配置

创建 webpack.prod.ts,配置生产环境特有的选项:

import { merge } from 'webpack-merge';
import baseConfig from './webpack.base';

const prodConfig = merge(baseConfig, {
  mode: 'production',
  // ...其他生产环境配置
});

export default prodConfig;

三、环境变量配置

使用 cross-envwebpack.DefinePlugin 来配置和管理环境变量:

npm install cross-env -D

package.json 中添加脚本:

"scripts": {
  "dev": "cross-env NODE_ENV=development webpack serve -c build/webpack.dev.ts",
  "build": "cross-env NODE_ENV=production webpack -c build/webpack.prod.ts"
}

webpack.base.ts 中使用 DefinePlugin

import { DefinePlugin } from 'webpack';

new DefinePlugin({
  'process.env': JSON.stringify(process.env)
})

四、文件别名配置

webpack.base.tstsconfig.json 中配置文件别名:

// webpack.base.ts
resolve: {
  alias: {
    '@': path.join(__dirname, '../src')
  }
}
// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}

五、构建速度优化

1. Webpack 进度条

安装 webpackbar

npm install webpackbar -D

webpack.base.ts 中引入:

import WebpackBar from 'webpackbar';

new WebpackBar()

2. 开启持久化存储缓存

webpack.base.ts 中配置缓存:

cache: {
  type: 'filesystem'
}

3. 开启多线程 loader

安装 thread-loader

npm install thread-loader -D

webpack.base.ts 中配置:

module: {
  rules: [
    {
      test: /.(ts|tsx)$/,
      use: [
        {
          loader: 'thread-loader',
          options: {
            workers: 4
          }
        },
        'babel-loader'
      ]
    }
  ]
}

六、构建产物优化

1. Bundle 分析工具

安装 webpack-bundle-analyzer

npm install webpack-bundle-analyzer -D

webpack.analy.ts 中配置:

import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';

new BundleAnalyzerPlugin()

2. 样式提取

安装 mini-css-extract-plugin

npm install mini-css-extract-plugin -D

webpack.base.tswebpack.prod.ts 中配置:

// webpack.base.ts
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

// webpack.prod.ts
new MiniCssExtractPlugin({
  filename: 'static/css/[name].css'
})

3. 样式和 JS 压缩

安装 css-minimizer-webpack-pluginterser-webpack-plugin

npm install css-minimizer-webpack-plugin terser-webpack-plugin -D

webpack.prod.ts 中配置:

import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
import TerserPlugin from 'terser-webpack-plugin';

optimization: {
  minimizer: [
    new CssMinimizerPlugin(),
    new TerserPlugin({
      parallel: true
    })
  ]
}

4. 代码分割

webpack.prod.ts 中配置代码分割:

optimization: {
  splitChunks: {
    cacheGroups: {
      vendors: {
        test: /node_modules/,
        name: 'vendors',
        minChunks: 1,
        chunks: 'initial',
        minSize: 0,
        priority: 1,
      },
      commons: {
        name: 'commons',
        minChunks: 2,
        chunks: 'initial',
        minSize: 0,
      }
    }
  }
}

结语

通过上述步骤,我们成功构建了一个基于 Webpack 的项目,并进行了一系列的优化。这些优化包括了环境变量配置、文件别名设置、构建速度提升以及构建产物优化等,旨在提高开发效率和项目性能。希望这篇文章能帮助你更好地理解和使用 Webpack。

标签:指南,配置,webpack,ts,Webpack,base,构建,import
From: https://blog.csdn.net/2301_77409965/article/details/143472627

相关文章

  • 【Vue3】Vue3相比Vue2有哪些新特性?全面解析与应用指南
    ......
  • 2024数模b题-问题一思路构建
    2024数模b题-问题一思路构建样本量计算根据置信空间的计算公式,逆累积分布函数(ICDF):逆累积分布函数(ICDF)是从累积分布函数的值反推出对应的Z分数。在MATLAB中,norminv函数就是计算标准正态分布的逆累积分布函数的值我们通过这个公式来得到我们可以得到对于95%置信水平,我们能得到Z=1.......
  • CentOS基于nginx构建本地YUM仓库
    #0.开启yum下载缓存sed-i'3ckeepcache=1'/etc/yum.conf#1.安装插件yuminstall-yyum-plugin-downloadonlycreatereporsync#2.创建仓库目录mkdir-p/mirrors/centos#3.下载文件或上传文件yuminstallnginx-y--downloadonly--downloaddir=/mirrors/centos#只下载......
  • 抖店精选联盟商家批量采集器抖音商家采集使用指南
    抖店精选联盟商家批量采集器抖音商家采集使用指南作者V****553813195抖店精选联盟商家批量采集器是一款能够帮助商家快速、精准地获取抖音平台上精选联盟商家信息的工具。以下是该工具的使用指南:一、下载与安装下载:商家可以从抖店开放平台或相关软件下载网站,下载抖店精选联盟......
  • Linux WireGuard搭建指南
    一、部署服务器1:安装WireGuardaptinstallwireguard2:生成密钥wggenkey|teeprivatekey|wgpubkey>publickeywggenkey|teeclient_privatekey|wgpubkey>client_publickey3:生成配置文件cat<<-EOF>wg0.conf[Interface]PrivateKey=$(catprivateke......
  • C#数组基础:声明、初始化与访问指南
    在C#中,数组是一种数据结构,用于存储固定大小的相同类型的元素集合。可以按照以下步骤声明和使用数组:声明数组指定数组类型和名称:首先,需要指定数组将存储的元素类型以及数组变量的名称。指定数组大小(可选):在C#中,可以在声明数组时指定它的大小(即它可以包含的元素数量),也可以......
  • 梁山派入门指南4——定时器使用详解,包括定时器中断、PWM产生、输入捕获测量频率
    梁山派入门指南4——定时器使用详解,包括定时器中断、PWM产生、输入捕获测量频率1.定时器概览2.基本定时器2.1基本定时器介绍2.2梁山派上的基本定时器开发2.2.1.了解梁山派上的基本定时器资源(实际上我们以及在上面了解过了)2.2.2.配置定时器2.2.3.编写定时器中断服务......