再来一打webpack面试题?webpack配置面试题

再来一打webpack面试题2.那你再说一说Loader和Plugin的区别? (就知道你会问这个,我用手掩盖着嘴角的微笑)
Loader 本质就是一个函数,在该函数中对接收到的内容进行转换&#x

2. 请告诉我更多关于加载器和插件之间的区别。

(我以为他会问我这个,所以我用手遮住了嘴角的笑容)

加载器本质上是一个函数,它转换它接收到的内容并返回转换后的结果。由于Webpack 只理解JavaScript,因此Loader 就成为翻译器,为翻译其他类型的资源执行预处理工作。

该插件基于事件流框架Tapable,它在Webpack执行期间广播许多事件,并允许您监听这些事件并修改输出结果。通过Webpack提供的API获取合适的时间。

加载器配置了module.rules 作为模块解析规则,其类型是数组。每个项目都是一个对象,包括测试(类型文件)、加载器、选项(参数)等属性。

插件在插件内单独配置,它们的类型是数组,每一项都是插件的实例,参数通过构造函数传递。

3.简述Webpack构建流程

Webpack的执行过程是一个串行过程,从头到尾运行如下:

初始化参数:从配置文件和shell语句中读取并合并参数,得到最终参数。

开始编译:使用上一步中获取的参数初始化Compiler 对象,加载任何配置的插件,并通过执行对象的run 方法开始编译。

确定条目:根据配置中的条目查找所有条目文件。

编译模块。从入口文件开始,调用所有已配置的加载器来转换模块,找到该模块所依赖的模块,重复此步骤,直到所有依赖该入口的文件都被该步骤处理完毕。

完成模块编译:在步骤4中使用加载器翻译完所有模块后,您将得到每个模块最终翻译的内容以及模块之间的依赖关系。

输出资源:根据条目和模块之间的依赖关系,将它们组装成包含多个模块的块,并将每个块转换为单独的文件并将其添加到输出列表中。这一步是您修改输出内容的最后机会。

输出完成:确定输出内容后,根据设置确定输出路径和文件名,并将文件内容写入文件系统。

在上述过程中,Webpack 在特定的时间点广播特定的事件,插件监听到感兴趣的事件后可以执行特定的逻辑,并通过调用Webpack 提供的API 来修改执行结果。网页包。

简单地说

初始化:开始构建、读取并合并配置参数、加载插件、实例化编译器

编译:从Entry开始,串行调用各个模块对应的加载器对文件内容进行变换,找到该模块所依赖的模块,递归执行编译过程。

输出:将编译后的模块组合成块,将块转换为文件,并输出到文件系统。

对源码感兴趣的同学可以访问我的另一篇专栏,从源码一窥Webpack 4.x的原理。

4. 在使用Webpack开发时,您使用过哪些插件来提高效率?

(这个问题很实际,用户体验要从小开始)

webpack-dashboard:可以让你以更易理解的方式查看相关的打包信息。

webpack-merge:提取公共配置并减少重复的配置代码。

Speed-measure-webpack-plugin:SMP 用于缩短Webpack 打包过程中的加载器和插件时间分析,并帮助找到构建过程中的性能瓶颈。

size-plugin:监控资源量变化,尽早发现问题。

HotModuleReplacementPlugin:热模块更换

5. 什么是源映射?如何在生产中使用它们?

文件指纹是打包后输出的文件名的后缀。

Hashing:关系到整个项目的构建。当项目文件更改时,整个项目的构建哈希值也会更改。

Chunkhash:与Webpack 打包的块有关。不同的条目将生成不同的块哈希。

Contenthash:根据文件内容定义哈希。如果文件的内容不改变,contenthash 也不会改变。

JS的文件指纹设置

设置输出的文件名并使用chunkhash。

模块. 导出={

条目: {

app: ‘./scr/app.js’,

search: ‘./src/search.js’

},

输出: {

文件名: ‘[名称][chunkhash:8].js’,

path:__目录名+ \’/dist\’

}

}

CSS的文件指纹设置

设置MiniCssExtractPlugin的文件名并使用contenthash。

模块. 导出={

条目: {

app: ‘./scr/app.js’,

search: ‘./src/search.js’

},

输出: {

文件名: ‘[名称][chunkhash:8].js’,

path:__目录名+ \’/dist\’

},

插件:[

新的MiniCssExtractPlugin({

文件名: [名称] [内容哈希:8].css

})

]

}

图片的文件指纹设置

设置文件加载器名称并使用哈希值。

占位符名称和含义

外部资源后缀名

名称文件名

path 到文件的相对路径

文件夹文件所在文件夹

contenthash 文件的内容哈希。默认由md5生成。

hash文件内容的hash默认是通过md5生成的。

代表表情符号文件内容的随机表情符号

const 路径=require(\’路径\’);

模块. 导出={

条目: ‘./src/index.js’,

输出: {

文件名: \”Bundle.js\”,

path:path.resolve(__dirname, \’dist\’)

},

模块:{

规则:[{

test:/.(png|svg|jpg|gif)$/,

使用:[{

loader: \”文件加载器\”,

选项:{

name:‘img/[名称][hash:8].[扩展名]’

}

}]

}]

}

}

11. 在实际项目中,配置文件通常包含数百行。如何确保每个加载程序按预期运行?

您可以使用强制执行加载程序操作的顺序。 Pre 表示在所有常规加载程序之前运行,post 表示在所有加载程序之后运行。 (官方不推荐内联)

12. 如何优化Webpack 构建速度?

(这个问题有点像“请告诉我从输入URL到显示页面的流程”**)

(我想说的是,“你想让我谈多少?”)

(面试官:)

使用更高版本的Webpack 和Node.js

多进程/多实例构建:HappyPack(不再维护)、线程加载器

压缩码

webpack-paralle-uglify-plugin uglifyjs-webpack-plugin 启用并行参数(不支持ES6)

terser-webpack-plugin 开启并行参数

多进程并行压缩

使用mini-css-extract-plugin 将CSS 代码分块提取到单独的文件中,打开cssnano,并通过css-loader 的最小化选项压缩CSS。

图像压缩

使用基于node库的imagemin配置image-webpack-loader(很多自定义选项,可以处理多种图像格式)

缩小包装范围。

排除/包含(确定加载器规则的范围),在resolve.modules中指定第三方模块的绝对路径(减少不必要的搜索)

solve.mainFields仅使用main字段作为入口文件描述字段(为了减少搜索步骤,应考虑运行时依赖的所有第三方模块的入口文件描述字段)。

solve.extensions 最大限度地减少后缀尝试的可能性

noParse 忽略根本不需要解析的库(库不会被解析,而是打包成包;忽略的文件包括诸如import、require 和Define 之类的模块化语句)(请注意,不存在这样的东西)。

IgnorePlugin(完全排除模块)

正确使用别名

提取页面的公共资源。

要通过CDN 部署基础包而不将它们包含在捆绑包中,请使用html-webpack-externals-plugin。使用SplitChunksPlugin分离(发布脚本、基础包、页面发布文件)并替换CommonsChunkPlugin插件。 -在。

基本包分离:

动态链接库:

使用DllPlugin进行分包,使用DllReferencePlugin(索引链接)引用manifest.json。这样就可以将一些永远不会改变的代码先打包到静态资源中,避免重复编译浪费时间。 HashedModuleIdsPlugin可以解决模块的数字ID问题

最大化缓存以加速二次构建。

babel-loader 打开缓存

总结一下

面试前你应该仔细准备。你需要准备好简历中提到的知识和原理。这就是你在面试中与其他人不同的地方。

另一个是表现出谦逊、努力工作和未来继续发展的愿望。企业在招聘人力资源时,更看重稳定的人员。

万事开头难,但是作为程序员坚持几年,还是有很大的成长空间的。关键是坚持。

为了帮助大家更加有效、高效地准备面试,专门整理了电子稿件文件《前端工程师面试手册》。

前端面试问题概述

以上#Other Webpack面试题相关内容摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93054.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月5日 上午8:55
下一篇 2024年7月5日 上午9:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注