前端面试-webpack篇
考点:
仅针对初中级,大概梳理下面几个
- 什么是webpack
- 核心概念
- 与gulp、grunt的区别
- 打包过程
- 怎么实现按需加载
- 你平时项目中写过webpack吗
什么是webpack
webpack是一个静态模块处理器,当它处理应用程序时,它会递归地构建一个关系依赖图,其中包含应用程序需要的每个模块,然后把所有这些模块打包成一个或多个包。
核心概念
- entry(入口)
告诉webpack要使用哪些模块,作为内部依赖图的开始
- output(出口)
告诉webpack在哪里输出它所构建的bundles,以及如何命名这些文件
- loader
处理非JS文件,把文件转换成webpack能处理的模块
loader 有两个属性:
- test 属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。
- use 属性,表示进行转换时,应该使用哪个 loader。
复制代码
- plugin 从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); //引入pluginmodule.exports = {// JavaScript 执行入口文件entry: './main.js',output: {// 把所有依赖的模块合并输出到一个 bundle.js 文件filename: 'bundle.js',// 输出文件都放到 dist 目录下path: path.resolve(__dirname, './dist'),},module: {rules: [{// 用正则去匹配要用该 loader 转换的 CSS 文件test: /\.css$/,use: [{loader: MiniCssExtractPlugin.loader},'css-loader',],}]},plugins: [new MiniCssExtractPlugin({filename: `[name]_[contenthash:8].css`,chunkFilename: '[id].css',})]
};
复制代码
- Module:
模块,在 Webpack 里一切皆模块,一个模块对应着一个文件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。
- Chunk
代码块,一个 Chunk 由多个模块组合而成,用于代码合并与分割。
与gulp、grunt的区别
Grunt
有大量现成的插件封装了常见的任务,也能管理任务之间的依赖关系,自动化执行依赖的任务
Gulp
是一个基于流的自动化构建工具。 除了可以管理和执行任务,还支持监听文件、读写文件。Gulp 被设计得非常简单,只通过下面5个方法就可以胜任几乎所有构建场景:
- 通过 gulp.task 注册一个任务;
- 通过 gulp.run 执行任务;
- 通过 gulp.watch 监听文件变化;
- 通过 gulp.src 读取文件;
- 通过 gulp.dest 写文件。
Gulp 的最大特点是引入了流的概念,同时提供了一系列常用的插件去处理流,流可以在插件之间传递。Gulp 的优点是好用又不失灵活,既可以单独完成构建也可以和其它工具搭配使用。
grunt和gulp是基于任务和流(Task、Stream)的。类似jQuery,找到一个(或一类)文件,对其做一系列链式操作,更新流上的数据, 整条链式操作构成了一个任务,多个任务就构成了整个web的构建流程。其缺点是集成度不高,要写很多配置后才可以用,无法做到开箱即用。
webpack是基于入口的。webpack会自动地递归解析入口所需要加载的所有资源文件,然后用不同的Loader来处理不同的文件,用Plugin来扩展webpack功能。
所以总结一下:
从构建思路来说 gulp和grunt需要开发者将整个前端构建过程拆分成多个Task
,并合理控制所有Task
的调用关系 webpack需要开发者找到入口,并需要清楚对于不同的资源应该使用什么Loader做何种解析和加工
webpack有哪些常见 loader 和 plugin,你用过哪些
file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件
source-map-loader:加载额外的 Source Map 文件,以方便断点调试
image-loader:加载并且压缩图片文件
babel-loader:把 ES6 转换成 ES5
css-loader:加载 CSS,支持模块化、压缩、文件导入等特性
eslint-loader:通过 ESLint 检查 JavaScript 代码
define-plugin:定义环境变量
commons-chunk-plugin:提取公共代码
uglifyjs-webpack-plugin:通过UglifyES压缩ES6代码
打包过程
1、初始化:启动构建,读取和合并参数,加载plugin,实例化complier
2、编译:从 Entry 发出,针对每个 Module 串行调用对应的 Loader 去翻译文件内容,再找到该 Module 依赖的 Module,递归地进行编译处理。
3、输出:对编译后的 Module 组合成 Chunk,把 Chunk 转换成文件,输出到文件系统。
segmentfault.com/a/119000001…
转载于:https://juejin.im/post/5cfa17a46fb9a07ef1617429
前端面试-webpack篇相关推荐
- 2.前端面试 css篇
一.CSS基础 1. CSS选择器及其优先级 选择器 格式 优先级权重 id选择器 #id 100 类选择器 #classname 10 属性选择器 a[ref="eee"] 10 ...
- @requestparam map 接收前端的值_前端面试总结篇(初级)
作为一个优秀的程序员,不仅仅可以解决工作的问题,还要不断的关注前端技术的发展,其中也包括了解最新的前端面试题,那么知识点来了,请接好 1. 你熟悉的es6 let.const.var的使用区别 let ...
- 前端面试-HTML5篇
链接:https://www.nowcoder.com/questionTerminal 来源:牛客网 Question 6 描述一下 cookies,sessionStorage 和 localSt ...
- 前端面试--webpack
百度安全验证 1.webpack的作用是什么,谈谈你对它的理解? 现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScrip ...
- 前端面试 React篇(上)
一.组件基础 1. React 事件机制 <div onClick={this.handleClick.bind(this)}>点我</div> React并不是将click事 ...
- c++中怎么数组内有用元素的个数_前端面试(算法篇) - 数组乱序
一.面试题 问:有一个长度为 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组? 答:这个...那个...emmmmmm 问:那先不挑 50 个,就挑一个数,知道怎么做吗? 答:这个我 ...
- java 乱序算法_前端面试(算法篇) - 数组乱序
一.面试题 问:有一个长度为 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组? 答:这个...那个...emmmmmm 问:那先不挑 50 个,就挑一个数,知道怎么做吗? 答:这个我 ...
- 前端面试 计算机网络篇
一.HTTP协议 1. GET和POST的请求的区别 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会 ...
- 阿里Android p6准备,项目经历准备篇——如何准备阿里巴巴P6/P7前端面试
项目经历准备篇--如何准备阿里巴巴P6/P7前端面试 在上次的校招文章之后,有很多同学问有没有社招相关的东西可以写一篇,现在它来了.比起校招,社招更加看重项目经历+项目经历反应的思考.本文针对的是想进 ...
- 第 2 节:前端面试指南 — HTML篇
翻身的码农「面试指南」系列,上一期我们更新了<简历篇>,没看的同学可以点击链接去围观. 昨天,我在视频号更新了第2节:HTML篇. 同样的,视频的最后有我整理的面试题福利,昨天已经看过的同 ...
最新文章
- 字符串数组-获取两个字符串中最大的相同子串(最大相同子串有且只有一个)
- Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)
- js long类型精度丢失_浮点数丢失精度
- 堆排序(heap_sort)
- MDX中Filter 与Exist的区别
- LeetCode 895. 最大频率栈(哈希+按频数存储)
- Laravel 在Centos上的安装
- Linux——CentOS建立一个最高权限的用户
- flask v0.1 项目工程
- ecshop添加404页面
- 学习webpack系列之四 ---- (学习开发环境)
- javacv相关学习:了解javacv
- Halcon识别激光雕刻二维码_ZCTMV
- 书海觅珍 遨游古今——广西国正书吧正式运营开业
- 数据分析案例-电影数据可视化分析
- C#编程-47:选择类控件复习笔记
- AcWing 1191. 家谱树 题解(拓扑排序)
- quartus ii 增量编译
- about ContentProvider
- 【读后感】读《了不起的盖茨比》后感