webpack3终极配置及其优化(react)

本文详细探讨了webpack3的配置和优化策略,包括webpack的执行流程、核心概念、loader和plugin的作用。讲解了如何配置scss、postcss、babel、图片处理及热替换等,并分析了webpack的性能优化技巧,如Scope Hoisting、DllPlugin和happypack。同时,对比了webpack与其他构建工具的优劣。
摘要由CSDN通过智能技术生成

本文主要研究webpack3版本的react项目配置。

这里写图片描述

webpack的原理

在普通开发者看来,webpack就是一个黑盒。

这里写图片描述
由一个或多个Entry(输入)传入,最后输出一个或多个Output(输出)

webpack的内部具体是如何处理的呢?

webpack几大概念

  • Entry: 输入。webpack从此处开始执行构建。
  • Output:输出。webpack最终处理输出的文件。
  • Plugin: 插件。webpack处理时抛出事件,插件接受事件处理额外的逻辑。
  • Loader:模块转换器。内容转换。
  • Module:模块。一个文件就是一个模块。
  • Chunk:块。一个块有一个或多个模块组成。

webpack执行流程

  1. 首先webpack会把Entry(输入)文件当作一个Module(模块)
  2. (使用Loaders,稍后会讲)翻译Module文件,并识别出Module文件的所有依赖文件。
  3. 然后对其依赖的文件再进行步骤2。
  4. 所有Module识别完之后,根据每个模块和Entry的对应关系,组装成一个或多个Chunk,并输出到输出列表。
  5. 根据Output的相关配置,输出到文件里。
  6. 这个过程中,webpack会在操作过程中广播特定事件,PLugin(插件)会在自己感兴趣的事件后,执行特定逻辑。

webpack如何解析文件与文件之间的联系?

对于模块与模之间的联系,开发者通常会
- 使用script标签引入
- 通过commonjs(commonjs1,commonjs2)引入
- 通过AMD(require.js)引入
- 通过es6定义的模块引入方式引入

除了第一种方式,webpack都可以识别,作为文件依赖的标志,我们可以通过config配置,去支持或禁用哪一种引入方式。

为什么要使用loader?

假设我们写了这么一行代码:

import style from './index.css'

不好意思,webpack解析不了。

webpack原生不能解析css文件,目前webpack只能原生解析js文件,需要Loader转换并插入到js文件。还有图片文件等等都需要Loader支持。(具体配置见后文)

为什么要使用plugin?

Plugin可以大大扩展webpack的功能,哈哈。(具体配置见后文)

webpack的基础搭建

基本配置

只要有输入,输出,webpack就能跑起来了。

// commonJS语法
const path = require(path);
const config = {
    entry: 'app.js',
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, '')
    }

}

module.exports = config;

如果我们定义了多个入口文件,我们就会输出与入口文件数量对应的多个包。

Scope Hoisting

生成的output文件本身是一个自执行函数&#

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值