面试题答案
一键面试JavaScript模块打包
- 打包过程:Webpack会从入口文件开始,通过静态分析,识别JavaScript模块间的依赖关系,构建依赖图。它会递归地遍历所有依赖的JavaScript文件。
- Loader配合:通常使用
babel-loader
来处理ES6+ 代码,将其转换为ES5等兼容性更好的代码,以适应不同的运行环境。例如,配置如下:
module.exports = {
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
};
- Plugin配合:
terser-webpack-plugin
可以在打包完成后对JavaScript代码进行压缩,去除冗余代码,减小文件体积,提升加载性能。
CSS模块打包
- 打包过程:Webpack默认不认识CSS,需要通过相关loader来处理。首先找到引入CSS的JavaScript或其他入口文件,然后处理CSS依赖。
- Loader配合:
css-loader
用于解析CSS文件中的@import
和url()
等引用,将CSS文件转换为JavaScript模块,其中内容是CSS字符串。style-loader
则是将CSS字符串插入到DOM的<style>
标签中,使得样式生效。配置如下:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
}
};
- 对于处理预处理器(如Sass、Less),还需要额外的loader,如 `sass-loader`、`less-loader` 等,配合 `css-loader` 和 `style-loader` 一起使用。
3. Plugin配合:mini - css - extract - plugin
可以将CSS从JavaScript中提取出来,生成单独的CSS文件,更好地实现样式的缓存和加载优化。
HTML模块打包
- 打包过程:Webpack本身不直接处理HTML,需要借助相关插件。它会查找HTML文件中对其他资源(如JavaScript、CSS)的引用,并将打包后的资源路径更新到HTML文件中。
- Loader配合:一般不使用专门的loader处理HTML,而是使用插件。
- Plugin配合:
html - webpack - plugin
会根据指定的HTML模板文件(如index.html
),自动将打包后的JavaScript和CSS文件插入到HTML中正确的位置。配置如下:
const HtmlWebpackPlugin = require('html - webpack - plugin');
module.exports = {
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
};
- `html - loader` 可以在某些场景下将HTML作为模块导入到JavaScript中,但更多用于处理HTML片段等特殊需求,与 `html - webpack - plugin` 功能有所不同。