自动化兼容性检查和解决方案:应用不会再白屏了(一)

简介: 自动化兼容性检查和解决方案:应用不会再白屏了

引言


对于前端开发者来说,caniuse网站是一个非常有用的工具,它可以帮助我们查询JavaScript API在不同浏览器版本中的兼容性情况。以fetch为例,我们可以在网站上查到其兼容性如下图所示:

image.png

fetch('http://domain/service', { method: 'GET' })
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(error => console.error('error:', error));

但是人工保证 API 的兼容性是不可靠的,下面我分享一个真实发生的案例来分享本文的主题自动化兼容性检查和解决方案


线上事故

最近发生了一起线上事故,让我深感惋惜。事情是这样的,小飞是刚毕业不久的前端应届生,7月份本该是他转正的日子。然而,不久前,由于他的一个小问题,导致线上APP H5页面出现了白屏,造成了部分业务损失。小飞同学主要负责借贷业务,这类业务涉及C端用户,而且涉及金钱,所以问题的严重性不言而喻。最终,这次事故导致他的转正申请未能通过,实在是遗憾。


事故原因

后来,小飞问我,该如何尽量避免这种白屏问题。他提到,在回归测试阶段,测试同学告诉他没有问题,结果线上用户才反馈白屏问题。我的第一反应是询问他是否有JS报错导致的问题。事实上,这确实是问题的根源。由于低端机型不支持某个API,导致页面报错,从而出现白屏问题。

那么,有没有办法在CICD流程中或者在代码开发中就能扫描到这种问题呢?除了监控系统之外是否还有其他方式?实际上是有的。之前我写过一篇文章我给项目加了性能守卫插件,同事叫我晚上别睡的太死,提到了如何利用eslint-plugin-compat插件来实现这种机制,从而避免类似线上生产事故的发生。使用这个插件,我们可以在代码开发阶段就发现可能的兼容性问题,让开发者及时修复,避免将问题带入线上环境。


自动化兼容性检查


使用eslint-plugin-compat插件

eslint-plugin-compat是一个强大的工具,可以帮助我们检查代码中使用的特性在不同浏览器中的兼容性。以下是使用eslint-plugin-compat进行自动化兼容性检查的步骤:

安装插件:

npm install eslint-plugin-compat --save-dev


配置ESLint:

在项目的.eslintrc.js配置文件中添加插件:

module.exports = {
  // ...
  plugins: [
    // ...
    'compat'
  ],
  // ...
};


设置browserslist:

通过使用browserslist配置,你可以确保你的项目在目标浏览器中都能够正常运行,并在开发阶段自动引入相应的polyfill或进行兼容性警告,从而节省调试时间,提高开发效率,并构建跨浏览器友好的Web应用。无论是在现代浏览器中使用最新的特性,还是在旧版浏览器中提供兼容性支持,browserslist都能帮助你轻松管理和配置项目的兼容性需求。

示例.browserslistrc配置如下:

# Browsers that have more than 5% global usage
> 5% 
# Last 2 versions of major browsers (including Chrome, Firefox, Safari, and Edge)
last 2 major versions 
# Specific browser versions
IE 11 
iOS >= 11
not dead
# Browsers used in specific countries
and_chr 78
and_ff 68
# Browsers used in specific environments
maintained node versions
not IE 11
# Development and production environment specific targets
development
  last 1 chrome version
  last 1 firefox version
production
  > 0.2%


配置选项 描述
> 5% 全球使用率超过5%的浏览器
last 2 major versions 最近两个主要版本的浏览器
IE 11 仅包括Internet Explorer 11
iOS >= 11 iOS系统版本大于等于11的浏览器
not dead 排除已经被认为是不再使用的浏览器
and_chr 78 特定版本的Chrome浏览器
and_ff 68 特定版本的Firefox浏览器
maintained node versions 当前被维护的Node.js版本
not IE 11 排除Internet Explorer 11
development 开发环境配置,指定兼容性需求
production 生产环境配置,指定兼容性需求
last 1 chrome version 最近一个版本的Chrome浏览器
last 1 firefox version 最近一个版本的Firefox浏览器
> 0.2% 全球使用率超过0.2%的浏览器

测试效果:

假设我们有以下的代码示例main.js

// main.js
const button = document.getElementById('my-button');
button.addEventListener('click', () => {
  console.log('Button clicked!');
});

运行eslint命令来检查代码的兼容性:

eslint main.js

如果浏览器版本支持addEventListener,则不会报错。否则,会提示相应的兼容性警告。


使用eslint-plugin-builtin-compat插件


eslint-plugin-builtin-compat是另一个用于检查浏览器兼容性的插件,它提供了一些额外的特性。


安装插件:

npm install eslint-plugin-builtin-compat --save-dev


配置ESLint:

在项目的.eslintrc.js配置文件中添加插件:

module.exports = {
  // ...
  plugins: [
    // ...
    'builtin-compat'
  ],
  // ...
};


配置检查脚本:

在package.json中添加检查脚本:

{
  "scripts": {
    // ...
    "compat-check": "eslint --no-eslintrc --ext .js main.js"
  }
}

运行检查脚本:

npm run compat-check


git提交校验


为了确保代码在提交前已经通过了兼容性检查,我们可以使用husky工具来在commit前执行校验。


安装husky:

npm install husky --save-dev


配置husky:

在package.json中添加pre-commit钩子,以在提交前执行兼容性检查:

{
  "husky": {
    "hooks": {
      "pre-commit": "npm run compat-check"
    }
  }
}

目录
相关文章
|
14天前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
50 10
|
3天前
|
敏捷开发 IDE 测试技术
自动化测试框架的选择与应用
【9月更文挑战第16天】在软件开发周期中,测试环节扮演着至关重要的角色。随着敏捷开发和持续集成的流行,自动化测试成为提升软件质量和效率的关键手段。本文将探讨如何根据项目需求选择合适的自动化测试框架,并通过实际案例分析展示其在软件开发过程中的应用。我们将从单元测试、集成测试到端到端测试等多个层面,讨论自动化测试的最佳实践和常见问题解决策略。
|
4天前
|
运维 应用服务中间件 网络安全
自动化运维之路:Ansible在配置管理中的应用
【9月更文挑战第15天】本文深入探讨了自动化运维工具Ansible的基本原理和实际应用,通过实例演示如何利用Ansible进行高效的配置管理和批量部署。文章不仅涵盖了Ansible的安装、配置以及基础使用,还详细介绍了如何编写有效的Playbook来自动化日常任务,并讨论了Ansible的最佳实践和常见问题的解决策略,为读者提供了一套完整的解决方案。
|
6天前
|
运维 应用服务中间件 Linux
自动化运维的利剑——Ansible在配置管理中的应用
【9月更文挑战第13天】 随着IT基础设施的日益复杂,手动进行系统配置和管理变得越来越低效且容易出错。Ansible,一个开源的IT自动化工具,因其简单易用和高效的特性成为运维工程师的新宠。本文将通过浅显易懂的语言和具体案例,带你了解如何利用Ansible简化日常的运维任务,实现快速、一致的配置部署与管理。
|
8天前
|
运维 监控 应用服务中间件
自动化运维的利剑:Ansible在配置管理中的应用
【9月更文挑战第11天】 当运维工作遇到瓶颈,效率和可靠性成为制约因素时,自动化工具Ansible如同一把锋利的利剑,为配置管理和批量部署带来革命性的改变。本文将深入探讨Ansible的核心功能、使用方法及其在实际运维场景中的强大作用,带领读者领略自动化运维的魅力,并分享如何通过代码示例实现高效管理。
11 1
|
15天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible在配置管理中的应用
【9月更文挑战第4天】在现代企业中,随着服务器数量的增加和业务的复杂性提高,传统的手动运维方式已经无法满足快速、高效、稳定的业务需求。自动化运维应运而生,成为提升工作效率、减少人为错误的关键技术。本文将介绍Ansible这一自动化运维工具,通过实例展示其在配置管理中的应用,帮助读者理解如何借助Ansible简化日常运维工作,实现服务器的批量管理与自动化部署。
40 4
|
20天前
|
监控 数据管理 jenkins
深入理解与应用软件自动化测试框架
【8月更文挑战第30天】在现代软件开发周期中,自动化测试已成为提高测试效率、保证软件质量的关键步骤。本文将探讨自动化测试框架的设计与实现,重点放在如何根据不同项目需求选择合适的测试框架,以及如何有效地集成到现有的开发和测试流程中。通过分析几个流行的自动化测试工具,如Selenium、Appium和JUnit,我们将讨论它们的特点、优势以及可能面临的挑战。此外,文章还将介绍一些最佳实践,帮助读者构建稳定且易于维护的自动化测试环境。
|
7天前
|
运维 Prometheus 监控
提升运维效率:自动化工具的应用与实践
运维工作作为信息技术领域的重要组成部分,其效率和质量直接关系到整个系统的稳定运行。随着科技的进步,自动化工具在运维中的应用越来越广泛。本文将探讨几种常见的自动化工具及其在实际操作中的应用案例,旨在为读者提供一些提升运维效率的思路和方法。通过合理利用这些工具,运维人员不仅可以提高工作效率,还能有效降低出错率,从而保障系统的高可用性。
13 0
|
19天前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
43 0
|
21天前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:Ansible在现代IT架构中的应用与实践
【8月更文挑战第30天】随着信息技术的飞速发展,企业对运维效率和可靠性的要求日益增高。传统的手动运维方式已难以应对复杂多变的IT环境,自动化运维因此成为行业新宠。本文将深入探讨Ansible这一流行的自动化工具,如何通过其简洁的配置管理和强大的多节点部署能力,助力现代IT架构实现高效、可靠的运维管理。我们将从Ansible的核心概念入手,逐步解析其在配置管理、任务执行、应用部署等方面的实战应用,并结合代码示例,展示如何利用Ansible简化日常运维工作,提升运维质量和效率。无论你是运维新手还是资深专家,这篇文章都将为你提供宝贵的洞见和实操技巧。

热门文章

最新文章