Webpack常见面试题

Webpack打包原理

webpack五大模块

Entry入口:以哪个文件为入口起点开始打包,分析构建内部依赖图

Output输出:指示Webpack打包后的资源bundles输出位置和命名

Loader加载器:让Webpack可以处理非js文件,比如样式文件,图片文件

Plugins插件:增强Webpack,打包优化,Gzip压缩,重新定义环境中的变量等

Mode模式:本地环境development 生产环境production

Webpack介绍

webpack只是一个打包模块的机制,只是把依赖的模块转化成可以代表这些包的静态文件。

webpack就是识别你的 入口文件。识别你的 模块依赖,来打包你的代码。至于你的代码使用的是commonjs还是amd或者es6的import。webpack都会对其进行分析。来获取代码的依赖。

webpack做的就是分析代码。转换代码,编译代码,输出代码。webpack本身是一个node的模块,所以webpack.config.js是以commonjs形式书写的(node中的模块化是commonjs规范的)

2.解析点vue文件过程

vue-loader 会把.vue文件中的内容拆分为 template,script,style 三个“虚拟模块”,
然后分别匹配 webpack 配置中对应的 rules,比如 script 模块会匹配所有跟处理 JavaScript 或 TypeScript 相关的 loader。

Webpack打包构建流程

  • 初始化参数
    配置文件和Shell语句中读取与合并参数
  • 开始编译
    根据参数初始化Compiler对象,加载配置插件,执行对象的run方法开始执行编译
  • 确定入口
    根据配置中的entry找出所有的入口文件
  • 编译模块
    调用所有配置的Loader对模块进行编译,再找到该模块的依赖的模块,在递归本步骤直到所有入口依赖的文件都本步骤处理
  • 完成模块编译
    得到每个模块被翻译后的最终内容以及它们之间的依赖关系
  • 输出资源
  • 输出完成

2.模块热更新

模块热更新是webpack的一个功能,他可以使代码修改过后不用刷新就可以更新,是高级版的自动刷新浏览器

devServer中通过hot属性可以控制模块的热替换

3.如何提高webpack构建速度

1、通过externals配置来提取常用库

2、利用DllPlugin和DllReferencePlugin预编译资源模块 通过DllPlugin来对那些我们引用但是绝对不会修改的npm包来进行预编译,再通过DllReferencePlugin将预编译的模块加载进来

3、使用Happypack 实现多线程加速编译

要注意的第一点是,它对file-loader和url-loader支持不好,所以这两个loader就不需要换成happypack了,其他loader可以类似地换一下

4、使用Tree-shaking和Scope Hoisting来剔除多余代码 5、使用fast-sass-loader代替sass-loader 6、babel-loader开启缓存

5.babel-loader在执行的时候,可能会产生一些运行期间重复的公共文件,造成代码体积大冗余,同时也会减慢编译效率 可以加上cacheDirectory参数或使用 transform-runtime 插件试试

6.不需要打包编译的插件库换成全局"script"标签CDN引入的方式

8、优化构建时的搜索路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是WebpackWebpack是一个开源的JavaScript模块打包工具,它可以将许多分散的模块按照依赖关系进行打包,生成优化后的静态资源。Webpack的主要目的是实现前端资源的模块化、组件化以及自动化构建。 2. Webpack的工作原理是什么? Webpack的工作原理主要包括两个部分:一是定义入口文件(entry),即需要打包的JavaScript文件;二是确定输出结果的配置(output),即打包后的文件格式和输出路径。Webpack会从入口文件开始,递归地查找并打包所有依赖的模块,最后生成优化后的静态资源。 3. Webpack有哪些常用的加载器(loader)? Webpack提供了多种加载器,用于处理不同类型的文件。常见的加载器有: - babel-loader:将ES6+代码转换为浏览器兼容的JavaScript代码。 - css-loader:解析CSS文件中的@import和url()语句,返回对应的CSS代码。 - file-loader:将文件输出到指定目录,通常用于处理图片、字体等资源文件。 - json-loader:处理JSON文件,将JSON字符串转换为JavaScript对象或数组。 - url-loader:将小于某个大小的URL转换为DataURL,以减小文件体积。 - vue-loader:用于处理Vue.js单文件组件(.vue文件)。 - sass-loader:用于处理Sass或SCSS文件,将其转换为CSS代码。 4. Webpack有哪些常用的插件(plugin)? Webpack提供了许多插件,用于优化构建过程。常见的插件有: - clean-webpack-plugin:在每次构建前清理/dist文件夹。 - html-webpack-plugin:自动生成HTML文件,用于启动开发服务器。 - copy-webpack-plugin:将单个文件或多个文件复制到指定目录。 - optimise-css-assets-webpack-plugin:压缩和优化CSS代码。 - minimizer-webpack-plugin:压缩和优化JavaScript代码。 - terser-webpack-plugin:压缩和优化JavaScript代码。 - webpack-bundle-analyzer:分析打包后的资源文件,提供优化建议。 5. 如何配置Webpack的热更新(Hot Module Replacement, HMR)? 要启用Webpack的热更新功能,需要在项目的入口文件中引入`webpack/hot/dev-server`模块,并在`webpack.config.js`中配置`devServer`选项。以下是一个简单的配置示例: ```javascript const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const { hotMiddleware } = require('react-hot-loader'); const config = { // ...其他配置项 devServer: { contentBase: path.join(__dirname, 'dist'), compress: true, port: 9000, hot: true, // 开启热更新功能 historyApiFallback: true, // 使用HTML5 History API作为路由模式 }, }; module.exports = config; ``` 6. 如何配置Webpack的多入口(Multiple Entry Points)? 要配置Webpack的多入口,需要在`entry`配置项中添加多个入口文件路径数组。例如: ```javascript module.exports = { // ...其他配置项 entry: { main: './src/main.js', app: './src/app.js', }, }; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值