概念
- 本质上,webpack是一个现代javaScript应用程序的静态模块打包器
- webpack4.0.0开始,可以不用显式引入配置文件
入口(entry)
- 内部依赖图的起点,通过
entry
属性进行配置,默认值为./src
- 可指定一个入口点,也可以指定多个入口点
出口(output)
- 制品的目标地址,通过
output
配置,制品默认名称为bundles
,默认地址为./dist
output.path
配置地址,output.filename
配置名称
加载器(loader)
- 用于处理
非javaScript
模块,webpack本身只理解JavaScript. - 将所对应类型的文件转换为webpack能够处理的有效模块,以方便对其打包
- 其核心能力在于转换,配置项为
module.rules=[{test:'xxx.txt',use'xxxLoader'}]
插件(plugins)
- 用于执行广义任务,比如打包优化、压缩、重新定义环境变量等,目的在于解决loader无法实现的其他事
- 官方提供了许多开箱即用的插件,如
HtmlWebpackPlugin
- 配置项为
plugins:[plugin1,plugin2...]
模式(mode)
- 提供环境选项,可选
development
和production
参数 - 配置项为
mode:'development'
入口(entry)
单入口语法
entry:'./xxxpath/xxx.js'
- 等价于
entry:{main:'xxxpath/xxx.js'}
多入口语法
entry:{pageOne:'./src/one.js',pageTwo:'./src/two.js,pageThree:'./src/three.js'}
- 本质上,建立了多个独立分离的依赖图
输出(output)
多入口项目
写入到硬盘: ./dist/app.js, ./dist/search.js
loader
- 本质上是一个方法
- 入参为一个参数,即包含资源文件内容的字符串
- 出参为两个参数,第一个参数为javaScript代码的字符串,第二个参数为 SourceMap,也是一个javaScript对象
插件(plugin)
- 插件是webpack的支柱功能
- 本质上,其是一个具有apply属性的javaScript对象
模块
- 模块化编程中,开发者将程序分解成离散功能块(chunk),称之为模块
- Node.js一开始就支持模块化编程,但web的模块化支持并不完备
webpack模块
- webpack支持多个模块规范,如
- ES5的
import
语句 - CommonJS的
require()
语句 - AMD的
define
和require
语句 - css/sass/lees的
@import
语句 - 样式或链接
url(...)
,<img src=...>
- webpack模块编程,主要通过loader特性实现
模块解析规则
- 绝对路径,如
import '/home/myfile'
- 相对路径,如
import './myfile'
- 模块路径,如
import 'mymodule'
构建目标(target)
- webpack提供了构建目标,作用类似于 war包或者jar包;
多个target
webpack实践
常见的loader及其作用
领域 | 名称 | 作用 |
文件 | raw-loader | 加载文件原始内容(utf-8) |
文件 | file-loader | 将文件发送到输出文件夹,并返回(相对)URL |
json | json-loader | 加载json文件(默认包含) |
转换编译 | script-loader | 在全局上下文中执行一次 javaScript文件 |
转换编译 | babel-loader | 加载es5+代码,然后使用babel转译为es5 |
转换编译 | ts-loader | 像javaScript一样加载TypeScript2.0+ |
模板 | html-loader | 到处html为字符串,需要引用静态资源 |
模板 | markdown-loader | 将markdown转译为html |
样式 | style-loader | 将模块的到处作为央视添加到dom中 |
样式 | css-loader | 加载css文件后,使用import加载,并且返回css代码 |
样式 | less-loader | 加载和转译less文件 |
样式 | sass-loader | 加载和转译 sass/scss文件 |
清理和测试 | eslint-loader | preloader,使用eslint清理代码 |
框架 | vue-loader | 加载和转译vue组件 |
框架 | angular2-template-loader | 加载和转译angular组件 |
常见的plugin及其作用
名称 | 描述 |
BannerPlugin | 在每个生成的chunk顶部添加banner |
CommonsChunkPlugin | 提取chunks之间共享的通用模块 |
CopyWebpackPlugin | 将单个文件或目录复制到构建目录 |
DefinePlugin | 允许在编译时配置的全局变量 |
DllPlugin | 为了极大减少构建时间,进行分离打包 |
HtmlWebpackPlugin | 简单拆改那就HTML文件,用于服务器访问 |
I18nWebpackPlugin | 为bundle增加国际化支持 |
IgnorePlugin | 从bundle中排除默写模块 |
NpmInstallWebpackPlugin | 在开发时自动按照缺少的依赖 |
常见的webpack工具
名称 | 作用 |
webpack dev middleware | 对活动包进行参数化的中间件 |
webpack dev server | 提供网页包应用程序,根据更改,实时更新浏览器的内容 |
npm install webpack | 通过webpack自动安装和保存依赖 |