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

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

CICD校验


除了在git进行校验,我们也可以在cicd流程进行校验,一旦不通过,就不通过MR


{
  "scripts": {
    "lint": "eslint . --ext .js"
  }
}
stage('Linting') {
    steps {
        sh 'npm run lint'
    }
}


三、使用polyfill解决兼容性问题


在某些情况下,即使经过兼容性检查,仍然可能存在一些浏览器不支持的新特性。这时候,我们可以使用polyfill来为这些浏览器提供缺失的功能。


手动polyfill


安装第三方库:

在项目中安装需要的polyfill库,比如core-js或者polyfill.io。


npm install core-js --save


写兼容性代码:

在需要兼容性支持的地方,引入相应的polyfill库,并编写对应的代码。


// main.js
import 'core-js/features/promise';
const button = document.getElementById('my-button');
button.addEventListener('click', () => {
  // 使用新特性Promise
  new Promise((resolve) => {
    setTimeout(() => {
      resolve('Button clicked!');
    }, 1000);
  }).then((message) => {
    console.log(message);
  });
});


自动polyfill

使用Babel来自动根据目标浏览器版本转换代码,并使用babel-runtime来抽离公共模块。


安装相关库:

npm install @babel/preset-env @babel/plugin-transform-runtime --save-dev


配置Babel:

在项目的.babelrc文件中配置Babel:


{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "corejs": 3
    }]
  ],
  "plugins": ["@babel/plugin-transform-runtime"]
}


按需引入polyfill:

根据实际使用的新特性,Babel会自动根据目标浏览器版本引入必要的polyfill。


// main.js
const button = document.getElementById('my-button');
button.addEventListener('click', () => {
  // 使用新特性Promise
  new Promise((resolve) => {
    setTimeout(() => {
      resolve('Button clicked!');
    }, 1000);
  }).then((message) => {
    console.log(message);
  });
});


动态polyfill服务:

可以使用polyfill.io等服务来动态为不支持的浏览器提供polyfill,以减少页面加载的数据量。


<!DOCTYPE html>
<html>
<head>
  <title>Polyfill Example</title>
</head>
<body>
  <button id="my-button">Click Me</button>
  <!-- 加载polyfill.io服务 -->
  <script src="https://polyfill.io/v3/polyfill.min.js"></script>
  <script src="main.js"></script>
</body>
</html>


再谈Babel


Babel 是一个 JavaScript 编译器,为什么这么说,因为babel不会处理Web API啊,我当时也认为babel自动帮我们做polyfill,结果忽略了Web API,babel只会处理ECMAScript标准中的特性

Babel 是一个工具链,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。


  • 语法转换
  • 通过 Polyfill 方式在目标环境中添加缺失的特性 (通过引入第三方 polyfill 模块,例如core-js)
  • 源码转换(codemods)


遇到的问题

在chrome61环境中报错ResizeObserver is not a function。

经确认ResizeObserver特性最低支持chrome64,于是将babel编译的目标版本设置为chrome 61,但改报错仍未解决,经过一番查找,原因如下:

Babel only polyfills ECMAScript features.

What is ECMAScript? It is the core of the JavaScript that you can use in the browser. Browsers implements ECMAScript, and on top of it there are lots of expansions (Dom objects, service workers, Ajax, ...). ResizeObserver is one of those expansions.

How can you know if a feature is part of ECMAScript or not?

I'd suggest searching for that function on MDN, and look at the Specifications section (ArrayBuffer example).

参考出处

于是手动引入resize-observer-pollyfill问题就解决了


目录
相关文章
|
20天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
42 3
|
2天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是敏捷开发环境中的重要作用和面临的挑战。通过分析自动化测试的基本原理、实施策略以及在实际项目中的应用案例,揭示了其在提高软件质量和加速产品交付方面的巨大潜力。同时,文章也指出了自动化测试实施过程中可能遇到的技术难题、成本考量及团队协作问题,并提出了相应的解决策略,为软件开发团队提供了有价值的参考和指导。
|
2天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
16 4
|
4天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
13 2
|
5天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
18 2
|
22天前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
2天前
|
NoSQL 测试技术 Go
自动化测试在 Go 开源库中的应用与实践
本文介绍了 Go 语言的自动化测试及其在 `go mongox` 库中的实践。Go 语言通过 `testing` 库和 `go test` 命令提供了简洁高效的测试框架,支持单元测试、集成测试和基准测试。`go mongox` 库通过单元测试和集成测试确保与 MongoDB 交互的正确性和稳定性,使用 Docker Compose 快速搭建测试环境。文章还探讨了表驱动测试、覆盖率检查和 Mock 工具的使用,强调了自动化测试在开源库中的重要性。
|
27天前
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全面指南在当今数字化时代,运维作为保障系统稳定性和效率的重要环节,其重要性不言而喻。本文将深入探讨如何构建一个高效的运维体系,从监控系统的搭建到自动化运维的实施,旨在为读者提供一套完整的解决方案。
本文详细介绍了高效运维体系的构建过程,包括监控系统的选择与部署、日志分析的方法、性能优化的策略以及自动化运维工具的应用。通过对这些关键环节的深入剖析,帮助运维人员提升系统的可靠性和响应速度,降低人工干预成本,实现业务的快速发展和稳定运行。
|
29天前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。
|
27天前
|
Web App开发 敏捷开发 Java
自动化测试框架的选择与应用
【10月更文挑战第4天】在软件开发的海洋中,自动化测试如同一艘航船,帮助开发者们快速穿越测试的波涛。选择适合项目的自动化测试框架,是确保航行顺利的关键。本文将探讨如何根据项目需求选择合适的自动化测试框架,并分享一些实用的代码示例,助你启航。