考点:

仅针对初中级,大概梳理下面几个

  • 什么是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篇相关推荐

  1. 2.前端面试 css篇

    一.CSS基础 1. CSS选择器及其优先级 选择器 格式 优先级权重 id选择器 #id 100 类选择器 #classname 10 属性选择器 a[ref="eee"] 10 ...

  2. @requestparam map 接收前端的值_前端面试总结篇(初级)

    作为一个优秀的程序员,不仅仅可以解决工作的问题,还要不断的关注前端技术的发展,其中也包括了解最新的前端面试题,那么知识点来了,请接好 1. 你熟悉的es6 let.const.var的使用区别 let ...

  3. 前端面试-HTML5篇

    链接:https://www.nowcoder.com/questionTerminal 来源:牛客网 Question 6 描述一下 cookies,sessionStorage 和 localSt ...

  4. 前端面试--webpack

    百度安全验证 1.webpack的作用是什么,谈谈你对它的理解? 现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScrip ...

  5. 前端面试 React篇(上)

    一.组件基础 1. React 事件机制 <div onClick={this.handleClick.bind(this)}>点我</div> React并不是将click事 ...

  6. c++中怎么数组内有用元素的个数_前端面试(算法篇) - 数组乱序

    一.面试题 问:有一个长度为 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组? 答:这个...那个...emmmmmm 问:那先不挑 50 个,就挑一个数,知道怎么做吗? 答:这个我 ...

  7. java 乱序算法_前端面试(算法篇) - 数组乱序

    一.面试题 问:有一个长度为 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组? 答:这个...那个...emmmmmm 问:那先不挑 50 个,就挑一个数,知道怎么做吗? 答:这个我 ...

  8. 前端面试 计算机网络篇

    一.HTTP协议 1. GET和POST的请求的区别 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会 ...

  9. 阿里Android p6准备,项目经历准备篇——如何准备阿里巴巴P6/P7前端面试

    项目经历准备篇--如何准备阿里巴巴P6/P7前端面试 在上次的校招文章之后,有很多同学问有没有社招相关的东西可以写一篇,现在它来了.比起校招,社招更加看重项目经历+项目经历反应的思考.本文针对的是想进 ...

  10. 第 2 节:前端面试指南 — HTML篇

    翻身的码农「面试指南」系列,上一期我们更新了<简历篇>,没看的同学可以点击链接去围观. 昨天,我在视频号更新了第2节:HTML篇. 同样的,视频的最后有我整理的面试题福利,昨天已经看过的同 ...

最新文章

  1. 字符串数组-获取两个字符串中最大的相同子串(最大相同子串有且只有一个)
  2. Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)
  3. js long类型精度丢失_浮点数丢失精度
  4. 堆排序(heap_sort)
  5. MDX中Filter 与Exist的区别
  6. LeetCode 895. 最大频率栈(哈希+按频数存储)
  7. Laravel 在Centos上的安装
  8. Linux——CentOS建立一个最高权限的用户
  9. flask v0.1 项目工程
  10. ecshop添加404页面
  11. 学习webpack系列之四 ---- (学习开发环境)
  12. javacv相关学习:了解javacv
  13. Halcon识别激光雕刻二维码_ZCTMV
  14. 书海觅珍 遨游古今——广西国正书吧正式运营开业
  15. 数据分析案例-电影数据可视化分析
  16. C#编程-47:选择类控件复习笔记
  17. AcWing 1191. 家谱树 题解(拓扑排序)
  18. quartus ii 增量编译
  19. about ContentProvider
  20. 【读后感】读《了不起的盖茨比》后感

热门文章

  1. 寻找代理服务器的常用软件
  2. OMEA Pro,刚刚荣获15届Jolt大奖,综合RSS阅读,邮件、任务等管理的IIM(智能信息管理)...
  3. javaScript this指向问题
  4. razorPage三元运算符使用注意
  5. mysql 下 计算 两点 经纬度 之间的距离
  6. uos/deepin设置屏幕缩放比例的命令
  7. 没有方案你抱怨;有了方案你会认真看吗?
  8. 编程基本功:正常运行的代码,你看明白能做什么?不如解决几个简单BUG
  9. 全网首发:终于把freetype的bitmap模式汉字字体旋转成功了
  10. 不要安全要性能,禁用补丁提高CPU性能