Webpack知识体系 | 青训营笔记


theme: condensed-night-purple

highlight: a11y-dark

这是我参与「第四届青训营 」笔记创作活动的的第8天

课程内容:

  • 什么是 Webpack
  • Webpack打包核心流程 -示例
  • Entry => Dependencies Lookup =>Transform => Bundle => Output-关键配置项介绍
  • Loader 组件
  • Plugin 组件 -如何学习Webpack -入门级:学会灵活应用 -进阶:学会扩展Webpack -大师:源码级理解Webpack打包编译原理

课程目标

理解Webpack的基本用法

通过介绍 Webpack功能、Loader 与 Plugin组件设计,建立一个知识体系

为什么要学习Webpack

  • 理解前端“工程化”概念、工具、目标
  • 一个团队总要有那么几个人熟悉Webpack,某种程度上可以成为个人的核心竞争力
  • 高阶前端必经之路

什么是 Webpack

前端项目由许多资源构成

以前是手动管理资源 但是会有许多问题:

依赖手工,文件过多时过程繁琐

当代码文件之间有依赖的时候,就得严格按依赖顺序书写,但是后期如果修改了位置就会出现问题

开发与生产环境一致,难以接入TS 或JS新特性, 比较难接入 Less、Sass等工具

JS、图片、cSS资源管理模型不一致

从本质上来讲,webpack是一个现代的JavaScript应用的静态模块化打包工具。

模块

前端模块化

目前使用前端模块化的一些方案: AMD、CMD、CommonJS、ES6。

在ES6之前,我们要想进行模块化开发,就必须借助于 其他的工具,让我们可以进行模块化开发。 并且在通过模块化开发完成了项目后,还需要处理模块间的 各种依赖,并且将其进行整合打包。

而webpack其中一个核心就是让我们可能进行模块化开发,并且会帮助我们处理模块间的依赖关系。

而且不仅仅是JavaScript文件,我们的CSS、图片、json文件等等在webpack中都可以被当做模块来使用(在后续我们会看到)。

这就是webpack中模块化的概念。

打包

打包如何理解呢? 理解了webpack可以帮助我们进行模块化,并且处理模块间的各种复杂关系后,打包的概念就非常好理解了。

就是将webpack中的各种资源模块进行打包合并成一个或多个包(Bundle)。

并且在打包的过程中,还可以对资源进行处理,比如压缩图片,将scss转成css,将ES6语法转成ES5语法,将TypeScript转成JavaScript等等操作。

但是打包的操作似乎grunt/gulpt也可以帮助我们完成,它们有什么不同呢?

和grunt/gulp的对比

grunt/gulp的核心是Task 我们可以配置一系列的task,并且定义 task要处理的事务(例如ES6、ts转化,图片压缩,scss转成css) 之后让grunt/gulp来 依次执行 这些task ,而且让整个流程 自动化. 所以grunt/gulp也被称为前端自动化任务管理工具。 定义一些task,自动化处理很多东西,如果没有做严格配置,是不能使用模块化的

我们来看一个gulp的task 下面的task就是将src下面的所有js文件转成ES5的语法,并且最终输出到dist文件夹中。

const gulp = require('gu1p');
const babe1 = requirec('gu1p-babe1');
gulp.task( "js ", () =>
  gulp.src('src/*.js ')
    .pipe(babe1({
      presets: ['es2015']
    }))
    .pipe(gulp.dest('dist'))
);

 

什么时候用grunt/gulp呢?

如果你的工程模块依赖非常 简单,甚至是没有用到模块化的概念. 只需要进行简单的合并、压缩,就使用grunt/gulp即可。 但是如果整个项目使用了 模块化管理,而且 相互依赖非常强,我们就可以使用更加强大的webpack了。

所以,grunt/gulp和webpack有什么不同呢?

grunt/gulp更加强调的是前端流程的自动化,模块化不是它的核心。 webpack更加强调模块化开发管理,而文件压缩合并、预处理等功能,是他附带的功能

Webpack打包核心流程

  • 安装 npm install webpack@3.6.0 -g
  • 编译配置文件
  • 执行编译命令 webpack

image.png

模块化+一致性

  1. 多个文件资源合并成一个,减少http请求数
  2. 支持模块化开发
  3. 支持高级JS特性
  4. 统一图片、CSS、字体等其它资源的处理模型
  5. ......

使用webpack

关于Webpack的使用方法,基本都围绕配置展开,而这些配置大致可划分为两类: - 流程类:作用于流程中某个or 若干个环节,直接影响打包效果的配置项 - 工具类:主流程之外,提供更多工程化能力的配置项

流程类

image.png

image.png

按使用频率: - entry/output - module/plugins - mode - watch/devServer/devtool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值