面试题答案
一键面试打包优化
- Tree Shaking:利用Tailwind CSS 2.0 及以上版本支持的 PurgeCSS 功能。配置 PurgeCSS 插件,在打包过程中分析 HTML、JavaScript 和其他相关文件,只保留项目中实际使用到的 Tailwind 样式类,去除未使用的样式,从而显著减小 CSS 文件体积。例如在Webpack配置中添加PurgeCSS插件:
const PurgeCSSPlugin = require('purgecss-webpack-plugin');
const glob = require('glob-all');
module.exports = {
//...其他配置
plugins: [
new PurgeCSSPlugin({
paths: glob.sync(`${path.join(__dirname, 'src')}/**/*`, {nodir: true}),
safelist: function () {
return {
standard: ['pt-4', 'pb-4'] // 手动添加不被清除的类
};
}
})
]
};
- CSS压缩:使用css - minimizer - webpack - plugin等插件对打包后的 CSS 文件进行压缩,去除不必要的空格、注释等,进一步减小文件大小。在Webpack配置中:
const MiniCssExtractPlugin = require('mini - css - extract - plugin');
const CssMinimizerPlugin = require('css - minimizer - webpack - plugin');
module.exports = {
//...其他配置
optimization: {
minimizer: [
// 其他minimizer
new CssMinimizerPlugin()
]
}
};
样式按需加载
- 动态导入:在 Qwik 中,利用其支持的动态导入功能,根据页面路由或用户交互动态加载 Tailwind 样式。例如,如果某些页面有特定的样式需求,可以将这些样式单独提取到一个 CSS 文件中,然后在对应的组件或路由模块中动态导入。
import {useTask$} from '@builder.io/qwik';
export default function MyComponent() {
const loadStyles$ = useTask$(async () => {
await import('./specific - styles.css');
});
return (
<div>
<button onClick={loadStyles$}>Load Specific Styles</button>
</div>
);
}
- 组件级样式导入:对于一些独立的组件,只导入该组件所需的 Tailwind 样式。可以通过在组件的 CSS 文件中只引入必要的 Tailwind 基础样式和自定义样式,避免全局样式的过度引入。例如,在一个按钮组件的
Button.css
文件中:
@tailwind base;
@tailwind components;
.btn {
@apply bg - blue - 500 text - white px - 4 py - 2 rounded;
}
@tailwind utilities;
自定义主题
- 配置文件定制:在 Tailwind CSS 的配置文件
tailwind.config.js
中进行主题定制。可以修改颜色、字体、间距等基础样式。例如,修改主题颜色:
module.exports = {
theme: {
extend: {
colors: {
'custom - primary': '#123456',
'custom - secondary': '#7890ab'
}
}
},
variants: {},
plugins: []
};
- 使用自定义插件:创建自定义的 Tailwind CSS 插件来扩展功能。例如,创建一个插件来生成特定业务需求的样式类。
module.exports = function ({addUtilities}) {
const newUtilities = {
'.custom - shadow': {
boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)'
}
};
addUtilities(newUtilities);
};
然后在 tailwind.config.js
中引入该插件:
module.exports = {
theme: {},
variants: {},
plugins: [
require('./path/to/custom - plugin.js')
]
};