webpack
2021-01-03 14:27
标签:提高效率 规则 事件 compiler 返回 react i18n 可视化 有助于 Loader 本质就是一个函数,在该函数中对接收到的内容进行转换,返回转换后的结果。 因为 Webpack 只认识 JavaScript, Webpack 的运行流程是一个串行的过程,从启动到结束会依次执行以下流程: (这道题还蛮注重实际,用户的体验还是要从小抓起的) source map 是将编译、打包、压缩后的代码映射回源代码的过程。打包压缩后的代码不具备良好的可读性,想要调试源码就需要 soucre map。 Webpack 实际上为每个模块创造了一个可以导出和导入的环境,本质上并没有修改 代码的执行逻辑,代码执行顺序与模块加载顺序也完全一致 (敲黑板,这道题必考) 可以使用 enforce 强制执行 loader 的作用顺序,pre 代表在所有正常 loader 之前执行,post 是所有 loader 之后执行。(inline 官方不推荐使用) webpack 标签:提高效率 规则 事件 compiler 返回 react i18n 可视化 有助于 原文地址:https://www.cnblogs.com/loveliang/p/13646480.html1.有哪些常见的Loader?你用过哪些Loader?
2.有哪些常见的Plugin?你用过哪些Plugin?
3.那你再说一说Loader和Plugin的区别?
所以 Loader 就成了翻译官,对其他类型的资源进行转译的预处理工作。
Plugin 就是插件,基于事件流框架 Tapable,插件可以扩展 Webpack 的功能,在 Webpack 运行的生命周期中会广播出许多事件,
Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果。
Loader 在 module.rules 中配置,作为模块的解析规则,类型为数组。每一项都是一个 Object,内部包含了 test(类型文件)、loader、options (参数)等属性。
Plugin 在 plugins 中单独配置,类型为数组,每一项是一个 Plugin 的实例,参数都通过构造函数传入。4.Webpack构建流程简单说一下
在以上过程中,Webpack 会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用 Webpack 提供的 API 改变 Webpack 的运行结果
简单说
? 初始化:启动构建,读取与合并配置参数,加载 Plugin,实例化 Compiler
? 编译:从 Entry 出发,针对每个 Module 串行调用对应的 Loader 去翻译文件的内容,再找到该 Module 依赖的 Module,递归地进行编译处理
? 输出:将编译后的 Module 组合成 Chunk,将 Chunk 转换成文件,输出到文件系统中5.使用webpack开发时,你用过哪些可以提高效率的插件?
? webpack-dashboard:可以更友好的展示相关打包信息。
? webpack-merge:提取公共配置,减少重复配置代码
? speed-measure-webpack-plugin:简称 SMP,分析出 Webpack 打包过程中 Loader 和 Plugin 的耗时,有助于找到构建过程中的性能瓶颈。
? size-plugin:监控资源体积变化,尽早发现问题
? HotModuleReplacementPlugin:模块热替换6.source map是什么?生产环境怎么用?
map文件只要不打开开发者工具,浏览器是不会加载的。
线上环境一般有三种处理方案:
? hidden-source-map:借助第三方错误监控平台 Sentry 使用
? nosources-source-map:只会显示具体行数以及查看源代码的错误栈。安全性比 sourcemap 高
? sourcemap:通过 nginx 设置将 .map 文件只对白名单开放(公司内网)
注意:避免在生产中使用 inline- 和 eval-,因为它们会增加 bundle 体积大小,并降低整体性能。7.模块打包原理知道吗?
8.说一下 Webpack 的热更新原理吧
Webpack 的热更新又称热替换(Hot Module Replacement),缩写为 HMR。 这个机制可以做到不用刷新浏览器而将新变更的模块替换掉旧的模块。
HMR的核心就是客户端从服务端拉去更新后的文件,准确的说是 chunk diff (chunk 需要更新的部分),实际上 WDS 与浏览器之间维护了一个 Websocket,当本地资源发生变化时,WDS 会向浏览器推送更新,并带上构建时的 hash,让客户端与上一次资源进行对比。客户端对比出差异后会向 WDS 发起 Ajax 请求来获取更改内容(文件列表、hash),这样客户端就可以再借助这些信息继续向 WDS 发起 jsonp 请求获取该chunk的增量更新。
后续的部分(拿到增量更新之后如何处理?哪些状态该保留?哪些又需要更新?)由 HotModulePlugin 来完成,提供了相关 API 以供开发者针对自身场景进行处理,像react-hot-loader 和 vue-loader 都是借助这些 API 实现 HMR。9.在实际工程中,配置文件上百行乃是常事,如何保证各个loader按照预想方式工作?