
webpack - 学习笔记
webpack
学习笔记。
引子
昨天小伙伴一面阿里,面试官上来就webpack
三连,直接问蒙。对于我们这些搬砖仔,平时项目一般都是直接开脚手架,根本没想到去碰webpack
,即使需要配插件,也是按照官方文档照搬。不过,该学的还是得学。
介绍
webpack
大家应该很熟悉了,没用过肯定见过。简单的讲就是一个静态模块打包器
,递归地构建项目依赖,然后打包输出。webpack
可以自动的为我们打包项目,同时还能引入一些插件完成辅助功能,最终实现前端工程化。
安装:
|
安装成功后直接在项目目录新建一个配置文件webpack.config.js
,内容类似于这样:
|
概念
webpack
有四个核心概念,分别是入口 (entry)、出口 (output)、加载器 (loader)、插件 (plugins),下面一一介绍:
入口 (entry)
入口可以理解为打包的起点,webpack
从入口开始,首先找到入口文件的相关依赖,再依次递归查找整个项目的依赖。入口可以有一个或者多个。
|
|
出口 (output)
出口告诉webpack
将打包后的文件输出到哪里,以及如何命名这些文件。
|
加载器 (loader)
webpack
自身只能处理JS
文件,但是项目中肯定不只有JS。这时候就要用到加载器了,通过它可以将其他类型的文件转换为webpack
能够处理的模块,例如CSS、图片、文件。
|
插件 (plugins)
加载器只是简单地被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。例如打包优化、压缩、变量重定义等等。
|
模式 (mode)
顺带提一下模式,我们可以使用模式来定义开发环境,development
或production
二选一,从而在不同的环境下定义不同的执行逻辑。
|
菜单
作为第二问,面试官肯定会让你报上常用的loader
和plugins
,奉上常用菜单。
Loader
file-loader
打包静态资源,蒋文君输出到打包文件夹中,代码中可以通过相对地址引入文件。url-loader
类似file-loader
,在文件很小的情况下以 base64 的方式把文件内容注入到代码中去。image-loader
加载并且压缩图片文件。babel-loader
将ES6
代码转换为ES5
代码。ts-loader
编译TS
文件并打包生成ES5
代码。eslint-loader
通过ESLint
检查代码规范。sass-loader
将scss
文件编译为CSS
。css-loader
整理多个CSS
文件之间的关系,最后打包成一个CSS
文件。style-loader
自动将CSS
样式挂载到HTML
文件的style
标签中。
Plugins
html-webpack-plugin
自动生成HTML
文件到输出目录,并且将打包后的chunk
文件自动引入到HTML
文件中。uglifyjs-webpack-plugin
通过UglifyES
压缩ES6
代码
补充
别名 (alias)
在代码中导入文件的时候,使用相对路径(../../
)或绝对路径(/
)会很麻烦。这时候我们可以配置一个别名来简化路径,例如常见的@
或~
表示根目录。
|
原理部分还在学习中,有时间补充……
- 本文作者:zhaoo
- 本文链接:https://www.izhaoo.com/2020/03/30/webpack-note/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
