Webpack面试

129 阅读2分钟

概念

webpack是模块打包工具,能够管理项目中的模块依赖,并且编译输出模块中所需要的静态资源文件。能够很好的管理,打包项目中的html,css,js和静态资源文件,优化开发。对于不同类型的依赖,有对应的模块加载器,并且根据项目中的依赖关系,最后合并生成优化的静态资源。

原理

将所有依赖打包成成一个bundle.js文件,通过代码分割成单元片段按需加载。

基础概念

entry

告诉webpack要使用哪些模块,作为内部依赖图的开始

output

告诉webpack在哪里输出它打包好的代码以及如何命名,默认为./dist

loader

处理非js文件,把文件转为成webpack能处理的模块

plugin

扩展webpack的能力,优化打包能力,资源管理和注入环境变量

chunk

webpack在进行模块的依赖分析的时候,代码分割出来的代码块

module

是开发中的单个模块

与Grunt和Gulp的区别

  • Grunt和Gulp需要开发人员将前端构建拆分为一个个task,并且合理的控制这些taks的调用关系。但是webpack只需要找到入口文件,并且清除不同资源要用什么类型的loader做何种解析和加工。
  • gulp更像后端开发者的思路,需要对于整个流程了如指掌 webpack更倾向于前端开发者的思路

常见的loader

  • baber-loader:将ES6转化为ES5
  • css-loader和style-loader:将CSS转为webpack能处理的模块
  • image-loader:压缩和打包图片文件

常用的plugin

  • define-plugin:定义环境变量
  • commons-chunk-plugin:提取公共代码
  • uglifyjs-webpack-plugin:通过UglifyES压缩ES6代码

打包过程

  • 初始化:启动构建,读取和合并参数,加载plugin,实例化complier
  • 编译:从 Entry 发出,针对每个 Module 串行调用对应的 Loader 去翻译文件内容,再找到该 Module 依赖的 Module,递归地进行编译处理。
  • 输出:对编译后的 Module 组合成 Chunk,把 Chunk 转换成文件,输出到文件系统

webpack优化

  • CDN加速优化
  • 压缩代码。删除多余的代码,注释。利用plugin插件来压缩js文件,利用cssnano来压缩css文件
  • 提取公共代码

配置多页应用

用webpack的Autowebplugin来完成简单自动化的构建,但是前提是项目的目录结构必须遵守预设的规范。

  • 页面都有公共的代码,抽离公共代码避免重复加载