面试题答案
一键面试实现思路
- 公共模块提取:利用Webpack的代码拆分功能,将多个入口页面中共同依赖的库和样式文件提取出来,形成单独的chunk。这样在加载页面时,公共模块只需加载一次,后续页面加载时直接从缓存中获取,提高加载效率。
- 动态导入:对于非首屏渲染必须的模块,采用动态导入(
import()
)的方式,实现按需加载,减少初始加载的文件体积。
Webpack配置要点
- entry:配置多个入口,例如:
entry: {
home: './src/home.js',
product: './src/product.js',
contact: './src/contact.js'
}
- output:配置输出路径和文件名,确保每个入口生成对应的输出文件,例如:
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[chunkhash].js'
}
- optimization.splitChunks:使用
splitChunks
进行公共模块提取。
optimization: {
splitChunks: {
chunks: 'all',
name: 'common',
minSize: 30000,
minChunks: 2
}
}
chunks: 'all'
表示对所有类型的chunk(包括初始chunk、异步chunk)都进行拆分。name
指定公共模块的名称为common
。minSize
表示被拆分出来的模块最小大小为30000字节,可根据项目情况调整。minChunks
表示至少被2个chunk引用才会被拆分出来。
- CSS处理:如果有公共样式,可使用
MiniCssExtractPlugin
插件提取CSS。
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, 'css-loader']
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: '[name].[chunkhash].css'
})
]
}
这样,公共样式也会被提取到单独的CSS文件中,实现优化加载。