webpack未转译第三方依赖axios为es5导致低端机型功能异常

背景:

兼容性测试流程中,遇到华为p9手机上的页面按钮点击无反应的问题。开发者工具查看后发现报错如下:

根据报错信息检查了一下页面引用的vendors包,发现有...语法,来自于第三方依赖axios。

原因:

axios包有es6语法,而我的项目的webpack.config.js配置的babel-loader排除了所有的node_modules的编译。如下:

javascript 复制代码
{
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader'
        },
      },

这样就不会编译axios为es5。

解决方案:

babel-loader也需要编译axios,配置如下:

javascript 复制代码
{
        test: /\.js$/,
        exclude: /node_modules\/(?!(axios)\/).*/, // 仅转译axios等必要库
        use: {
          loader: 'babel-loader'
        },
      },

重新打包后,发现axios已被编译为es5,页面按钮点击正常,bug修复。

优化:

为了防止这个问题的再次发生,在webpack打包后加了一次是否是es5代码的检查,利用webpack-shell-plugin和es-check。

  • webpack-shell-plugin 是一个 Webpack 插件,它允许你在 Webpack 构建过程的不同阶段执行 shell 命令。
  • es-check 是一个用于检查 JavaScript 代码是否符合指定 ECMAScript (ES) 版本规范的工具,可以帮助你在构建流程中确保代码兼容性。
ini 复制代码
// webpack.config.js
const WebpackShellPlugin = require('webpack-shell-plugin');
module.exports = {
	plugins: [
    new WebpackShellPlugin({onBuildEnd:['npm run check-es5']})
  ],
}
json 复制代码
// package.json
  "scripts": {
	"check-es5": "es-check es5 './output/*.js'"
}

这样会在webpack打包之后,对打包的js文件做一次检查。

相关推荐
计算机魔术师15 分钟前
同样是AI辅助建造,为什么有的游戏三个月就烂尾了?
前端
用户9210802628626 分钟前
0. 做 Agent 产品,前端 AI 组件框架怎么选?
前端
拾年2751 小时前
React Hooks 进阶篇:useMemo / useCallback / useReducer / useImperativeHandle,用「算账 +
前端·javascript·react.js
Jackson__1 小时前
面试官:如何在老项目中使用新框架,并实现通信?
前端·javascript·面试
拾年2752 小时前
React Hooks 保姆级教程:把组件想象成失忆的打工人,4 个 Hook 带你原地起飞
前端·javascript·react.js
mmsx2 小时前
一个 Bug 修了 12 轮,根因只有一句话:AI 编程时代,日志才是唯一的真相
前端
默_笙2 小时前
😝 5 亿次循环卡死页面?我用 Web Worker 把它扔进后台线程,页面丝滑如初
前端·javascript
CAD老兵2 小时前
一行代码集成 DWG/DXF 图纸查看:测量批注,数据不出站
前端·javascript·github
小林ixn2 小时前
单例模式:从弹窗管理到全局状态,一个模式搞定
前端·javascript·设计模式
AI编程实验室2 小时前
Node.js Agent Handoff 仓库扫描 MVP:忽略规则、include 通配与稳定输出实现
前端·ai编程