前端工程化相关问题梳理(个人草稿-不推荐阅读)。
@babel/preset-env@postcss-preset-evnstylelint-no-unsupported-browser-features浏览器API需要单独手动补丁
js// 方式 1:在入口文件(如 main.js)中全局引入(推荐配合 `@babel/preset-env` 的按需逻辑)
import 'whatwg-fetch'; // Fetch API 补丁(兼容 IE11 等)
import 'intersection-observer'; // IntersectionObserver 补丁
import '@ungap/mutation-observer'; // MutationObserver 补丁(兼容低版本 Safari)
// 方式 2: 使用 CDN 动态加载 Polyfill(适合非打包场景 / 多项目复用)
// <script src="https://polyfill.io/v3/polyfill.min.js?features=fetch,IntersectionObserver,MutationObserver"></script>
方案 3:能力检测 + 降级逻辑(无补丁时的兜底)
// Fetch API 降级为 XMLHttpRequest
function request(url) {
if (window.fetch) {
return fetch(url);
} else {
// 降级逻辑:用 XHR 实现
return new Promise(/* ... */);
}
}
// IntersectionObserver 降级为滚动监听
function initLazyLoad() {
if (window.IntersectionObserver) {
// 正常逻辑
const observer = new IntersectionObserver((entries) => { /* ... */ });
} else {
// 降级:监听 scroll 事件 + 手动计算元素位置
window.addEventListener('scroll', () => { /* ... */ });
}
}
CSS Houdini 的兼容方案
js//
if ('paintWorklet' in CSS) {
CSS.paintWorklet.addModule('custom-paint.js'); // 加载自定义 Paint 逻辑
} else {
// 降级:使用普通 CSS 属性/伪元素实现同等效果
document.documentElement.classList.add('no-houdini');
}
js// postcss.config.js
module.exports = {
plugins: [
require('postcss-preset-env')({
browsers: 'extends browserslist-config-your-project', // 联动 browserslist
features: {
'css-properties-values-api': false, // 禁用未兼容的特性(或设为 "polyfill")
'custom-properties': true // 降级 CSS 变量(IE11 兼容)
}
})
]
};
集成stylelint-no-unsupported-browser-features
.stylelintrc.js
jsmodule.exports = {
plugins: [
'stylelint-no-unsupported-browser-features' // 引入插件
],
rules: {
// 配置兼容性检测规则
'plugin/no-unsupported-browser-features': [
true, // 开启检测(设为 "warning" 则只警告不报错)
{
// 关联 browserslist 配置(默认读取项目根目录的 browserslist)
browsers: 'extends browserslist-config-my-project', // 也可直接写如 "> 1%, last 2 versions"
severity: 'error', // 违规级别:error/warning
ignore: ['flexbox'], // 忽略某些特性的检测(可选)
ignorePartialSupport: false // 是否忽略「部分支持」的情况(默认 false,即部分支持也报错)
}
]
}
};
在构建工具中检测
webpack.config.js
jsconst StylelintPlugin = require('stylelint-webpack-plugin');
module.exports = {
plugins: [
new StylelintPlugin({
// 要校验的文件范围
files: ['src/**/*.{css,scss,less}'],
// 校验失败时是否阻断构建(开发环境可设为 false,仅警告;生产环境建议设为 true)
failOnError: process.env.NODE_ENV === 'production',
// 输出详细的错误信息
quiet: false,
// 启用缓存(提升构建速度)
cache: true
})
]
};



方案 2:Webpack + webpack-bundle-analyzer + 兼容性扫描脚本(进阶)
.editorconfig, .prettier , .eslint, .stylelint, Typescripthusky
commitlint 约束git提交代码时的注释规范lint-staged 按需校验jest vitestvscode插件
EditorConfig 磨平编辑器书写格式差异Prettier 代码风格问题Eslint 代码质量问题,避免一些低级错误Stylelint CSS代码质量、代码规范检查
stylelint-no-unsupported-browser-featuresstylelint-webpack-plugin 在构建工具中提示错误Compare Folderses6-string-htmlJavaScript (ES6) code snippetsliveServerColor PickerTailwind CSS IntelliSenseGitLensVue Language Features (Volar)Vetur.vscode配置文件
浏览器插件
高复用、低耦合,如何辨别?
可维护性强的代码核心特征是易理解、易修改、易扩展、易复用、易测试,需从设计原则、架构解耦、编程范式、工程化实践等多维度构建,具体可拆解为以下层面:
模块化、组件化、分层设计
React思想
为什么函数式编程对React非常重要?
微服务的定义
微前端特点
微前端要考虑的点(具备哪些能力)
微前端的技术实现
其它微前端有哪些解决方案
编码时是否使用AI? deepseek, vscode插件?
.webp 雪碧图、 字体本文作者:郭郭同学
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!