Amadeus's blog Amadeus's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • TypeScript
    • 前端工程化
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
  • HTML
  • CSS
  • stylus
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 口语
  • 音标
  • 语法
  • 简单
  • 中等
  • 困难
  • 20年10月
  • 20年11月
  • 20年12月
  • 21年01月
  • 21年02月
  • 21年03月
  • 21年04月
  • 21年05月
  • 21年06月
  • 21年07月
  • 21年08月
  • 21年09月
  • 21年10月
  • 21年11月
  • 21年12月
  • 22年01月
  • 22年02月
  • 22年03月
  • 22年04月
  • 22年05月
  • 22年06月
  • 22年07月
  • 22年08月
  • 22年09月
  • 21年3月
  • 知识笔记
  • 22年5月
  • 22年8月
  • 22年9月
  • 学习
  • 书法
  • 面试
  • 音乐
  • 驾照
  • 深度强化学习
  • 心情杂货
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Amadeus

起风了,唯有努力生存!
首页
  • 前端文章

    • JavaScript
    • Vue
    • TypeScript
    • 前端工程化
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
  • HTML
  • CSS
  • stylus
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 口语
  • 音标
  • 语法
  • 简单
  • 中等
  • 困难
  • 20年10月
  • 20年11月
  • 20年12月
  • 21年01月
  • 21年02月
  • 21年03月
  • 21年04月
  • 21年05月
  • 21年06月
  • 21年07月
  • 21年08月
  • 21年09月
  • 21年10月
  • 21年11月
  • 21年12月
  • 22年01月
  • 22年02月
  • 22年03月
  • 22年04月
  • 22年05月
  • 22年06月
  • 22年07月
  • 22年08月
  • 22年09月
  • 21年3月
  • 知识笔记
  • 22年5月
  • 22年8月
  • 22年9月
  • 学习
  • 书法
  • 面试
  • 音乐
  • 驾照
  • 深度强化学习
  • 心情杂货
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • TypeScript笔记

  • 前端工程化

    • 为何要前端工程化
    • 前端工程化发展历史
    • 工程化关键技术
    • Webpack快速入门
      • ZBestPC项目工程化
      • Vue2-Elm项目升级
      • 脚手架
      • React项目
      • ZBestPC项目React化
      • Vite入门
      • 前端性能优化
      • Webpack源码分析
      • vue-loader源码分析
      • Blog环境更新测试
    • 面试

    • 小程序

    • Vue3源码解析

    • 设计模式

    • NestJS笔记

    • JavaScript文章

    • Vue文章

    • 学习笔记

    • 温州LW公司项目总结

    • 前端
    • 前端工程化
    Amadeus
    2022-11-24
    目录

    Webpack快速入门

    # Webpack快速入门

    # Webpack核心概念

    1. entry:入口模块文件路径
    2. output: 输出bundle文件路径
    3. module: 模块,webpack构建对象
    4. bundle: 输出文件,webpack构建产物
    5. chunk:中间文件,webpack构建的中间产物
    6. loader:文件转换器
    7. plugin:插件,执行特定任务

    # 配置的拆分与合并

    // 使用 webpack-merge 进行配置合并
    const common_config = require('./webpack.base.config')
    const {smart: merge} = require('webpack-merge')
    
    const prod_config = {
        mode: 'production'
    }
    
    module.exports = merge(common_config, prod_config)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 配置开发服务器

    devServer:{
        port:8080,
        contentBase:'./dist',
        progress:true,// 打包显示进度条
        open:true,	// 自动打开浏览器
        compress:true, // 启动gzip
        proxy:{
            '/api':{
                target:'http://localhost:8080',
                changeOrigin:true,
                pathRewrite:{ // 路径替换
                    '^/api':''
                }
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    # 处理CSS样式

    style-loader 把样式放到style标签里

    css-loader 打包css进行合并

    scss-loader 处理scss文件打包

    postcss-loader 进行兼容性编译,autoprefixer //自动添加浏览器前缀

    # 处理图片

    file-loader单独打包到img文件夹里,防止首次渲染太慢

    url-loader比较小的图片,就转成base64格式,减少http请求

    # 多入口

    module.exports = {
        entry:{
            index:'./src/index.js',
    		other:'./src/other.js'
        },
        plugins:{
            new HtmlWebpackPlugin({	//打包html文件
            	template:'./src/index.html',
            	filename:'index.html',
            	chunks:['index']	// 绑定入口文件
        	}),
        	new HtmlWebpackPlugin({
               	template:'./src/other.html',
            	filename:'other.html',
            	chunks:['other']
        	}),
            new CleanWebpackPlugin() // 清理旧的打包文件
        }
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    # 抽离CSS

    MiniCSSExtractPlugin() 把html中的css从style标签中抽离出来成css文件,并用link进行引用

    TerserPlugin()压缩js

    OptimizeCssAssetsWebpackPlugin()压缩css

    使用postcss、postcss-loader、postcss-preset-env及package.json的browserslist做兼容性处理

    # 抽离公共代码

    公共模块不需要重复打包,可以单独抽离成一个公共模块文件,然后引用即可

    第三方模块一般不会改变,不需要业务代码改变之后重新打包,也可以单独抽离成一个公共模块文件,然后引用

    import from 同步代码

    import() 异步代码

    vendor 第三方模块

    common 公共模块

    splitChunks
    
    1

    # 减少代码体积

    TreeShaking

    babel打包压缩

    图片压缩

    # 优化代码运行性能

    Code Split

    将大代码分割成多个,按需加载 import()

    统一给chunk命名

    preload和prefetch

    编辑 (opens new window)
    工程化关键技术
    ZBestPC项目工程化

    ← 工程化关键技术 ZBestPC项目工程化→

    最近更新
    01
    公司B端项目
    03-11
    02
    公司C端官网项目
    03-11
    03
    简历
    03-09
    更多文章>
    Theme by Vdoing | Copyright © 2020-2026 Amadeus | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式