-
什么是webpack
- webpack是一个JavaScript静态模块打包工具
- webpack里面一切文件皆是模块,通过loader转换文件,通过plugin注入钩子
- 最终输出有多个模块组合的文件,webpack专注构建模块化项目
- webpack可以看做模块打包机:所做的事情
- 分析你的项目结构
- 找到JavaScript模块以及其他的一些浏览器不能直接运行的扩展语言(scss,TS)
- 将其打包为合适的格式以供浏览器使用
-
webpack的优点
- 专注于处理模块化的项目, 能做到开箱即用,一步到位
- 通过plugin扩展,完整好用又不失灵活
- 通过loader扩展,可以让webpack把所有类型的文件都解析打包
- 区域庞大活跃,经常引入紧跟时代发展的新特性,能为大多数场景找到已有的开源扩展
- 使用场景不局限与web开发
- 提供了更好的开发体验
-
webpack的构建流程是什么? (从读取配置到输出文件这个过程开始)
- webpack的运行流程是一个串行的过程, 从启动到结束回依次执行以下流程
- 初始化参数, 从配置文件读取与合并参数 , 得到最终参数
- 开始编译 , 用上一步得到的参数初始化compiler对象,加载所有配置的插件,开始执行编译
- 确定入口 , 根据配置中的entry找到所有的入口文件
- 编译模块 , 从入口文件触发,调用所有的loader对模块进行翻译,再找出该模块依赖的模块,在递归本步骤直到所有的入口依赖的文件都经过本步骤处理
- 完成模块编译 在经过上一步所有的loader翻译所有模块后,得到每个模块被翻译后的最终内容以及它们之间的依赖关系
- 输出资源 根据入口和模块之间的依赖关系,组装成一个一个包含多个模块的chunk,再把每个chunk转换成一个单独的文件加入到输出列表
- 在以上过程中,webpack会在特定的时间点广播出特点的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用webpack提供的API改变webpack的运行结果
- webpack的运行流程是一个串行的过程, 从启动到结束回依次执行以下流程
-
常见的loader(加载器)
- file-loader 把文件输出到一个文件夹中,在代码中通过相对URL去引入输出的文件
- URL-loader 和file-loader类似,但是能在文件很小的情况下以base64的方式把文件内容注入到代码中去
- source-map-loader 加载额外的source map 文件 , 以方便断点调试
- image-loader 加载并且压缩图片文件
- babel-loader 把ES6转换为ES5
- css-loader 加载css , 支持模块化 压缩 ,文件导入等特性
- style-loader 把css代码注入到JavaScript中,通过DOM操作去加载css
- eslint-loader 通过ESlint检查Javascript代码
-
Loader(加载器)和Plugin(钩子,插件)的区别
- 作用不同
- loader直译为"加载器",webpack将一切文件视为模块,但是webpack原生是只能解析js文件,如果想将其他文件也打包的话,就会用到loader.所以loader的作用是让webpack拥有了加载和解析非JavaScript的能力.
- Plugin直译为"插件",也叫做钩子,Plugin可以扩展webpack的功能, 让webpack具有更多的灵活性. 在webpack运行的生命周期中会广播出许多事件, plugin可以监听这些事将,在合适的时机通过webpack提供的API改变输出结果
- 用法不同
- Loader在module.rules中配置,也就是说他作为模块的解析规则而存在,类型为数组,每一项都是一个Object,里面描述了对于什么类型的文件,使用什么加载和使用的参数
- Plugin在plugins中单独配置,类型为数组,每一项是一个plugin的实例,参数都通过构造函数传入
- 作用不同
面试常问的webpack知识点
最新推荐文章于 2023-02-12 08:22:30 发布