面试题答案
一键面试颜色值提取 loader
- 创建
extractColorsLoader.js
文件
module.exports = function (source) {
const colorRegex = /#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})|rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)|rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([01]|0\.[0-9]+)\s*\)|hsl\(\s*(\d{1,3})\s*,\s*(\d{1,3}%)\s*,\s*(\d{1,3}%)\s*\)|hsla\(\s*(\d{1,3})\s*,\s*(\d{1,3}%)\s*,\s*(\d{1,3}%)\s*,\s*([01]|0\.[0-9]+)\s*\)/g;
const colors = [];
let match;
while ((match = colorRegex.exec(source))) {
colors.push(match[0]);
}
const jsonContent = JSON.stringify({ colors });
// 将颜色信息写入文件
const fs = require('fs');
fs.writeFileSync('colors.json', jsonContent);
return source;
};
CSS 压缩 loader
- 创建
cssMinifyLoader.js
文件
const cssnano = require('cssnano');
module.exports = function (source) {
return cssnano.process(source).css;
};
Webpack 配置
在 webpack.config.js
中配置如下:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
'cssMinifyLoader',
'extractColorsLoader'
]
}
]
}
};
在上述配置中,use
数组里的 loader 是从后往前执行的,先执行 extractColorsLoader
提取颜色值并写入 JSON 文件,再执行 cssMinifyLoader
对 CSS 进行压缩。注意要确保 cssnano
已安装,可以通过 npm install cssnano --save-dev
安装。