开发过程中遇到一个问题,记录一下
本地打包发布正常,发测试环境正常,可是通过Jenkins打包发布线上报错

报错信息

index-67fbbd81.js:39 Error: Minified React error #130; visit https://reactjs.org/docs/error-decoder.html?invariant=130&args[]=undefined&args[]= for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
打开报错信息发现报错
在这里插入图片描述
由于这次更新内容比较多,开始怀疑是不是本地代码问题,
组件undefined一般是引入导出组件名问题。让cursor检查了一遍代码,发现代码没有问题。
又从git上重新拉取代码,下载依赖,运行,也是没问题。
本地生产环境没问题,线上报错,说明问题很可能出在环境差异上。
对比了一下Jenkins上的node版本,react版本等,发现版本号一致。
猜想可能是使用本地包的问题,在服务器上单独下载了依赖,导致线上本地依赖包不一致。
原本的Jenkins打包命令

yarn install
yarn build

yarn install 不是严格模式,可能会根据 semver 自动升级依赖,导致和本地 node_modules 不一致。
如果 Jenkins 的 node_modules 目录有残留,可能会混入旧依赖,导致打包产物和本地不一样。
更改后的Jenkins命令

rm -rf node_modules
yarn cache clean
yarn install --frozen-lockfile
yarn build

rm -rf node_modules:彻底清理依赖,避免残留
yarn cache clean:清理 yarn 缓存
yarn install --frozen-lockfile:严格按照 yarn.lock 安装依赖,保证和本地一模一样
yarn build:正常打包
这样可以100% 保证 Jenkins 构建出来的依赖和本地完全一致,不会因为依赖包差异导致线上 undefined 或 React #130 错误。
很多线上“本地没问题,线上报错”的根因,都是因为 CI/CD 没有严格依赖锁定
接下来重新用用Jenkins打包----正常-----线上-----正常!
完美解决!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88412.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88412.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88412.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务项目远程调用时的负载均衡是如何实现的?

负载均衡概述 负载均衡是微服务架构中的核心组件,用于将请求合理分配到多个服务实例上,提高系统的可用性和性能。负载均衡的分类 负载均衡大致可以分为两类 1. 服务端负载均衡 实现位置:独立部署的负载均衡服务器(位于客户端和服务…

【中文核心期刊推荐】中国农业科技导报

《中国农业科技导报》是中国科技核心期刊,也是北京大学图书馆“中文核心期刊要目总览”收录的期刊。它是由中国农村技术开发中心主办,全面为科教兴农服务的综合性农业学术期刊。《中国农业科技导报》是中国农业科学院生物技术研究所承办的&a…

php 如何通过mysqli操作数据库?

在PHP中,mysqli(MySQL Improved Extension)是操作MySQL数据库的扩展库,提供了面向对象和过程式两种风格。以下是mysqli的基本操作方法: 1. 连接数据库 面向对象风格 $mysqli new mysqli(localhost, username, passwor…

c/c++拷贝函数

memcpy()函数概要原型void * memcpy ( void * dest, const void * src, size_t num );功能memcpy()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上(memcpy()并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用…

HTTP核心基础详解(附实战要点)

目录 一图胜千言:HTTP核心机制图解​编辑 一、HTTP本质:通信的桥梁 二、五大核心特性解析 三、HTTP头部:隐藏的控制中心 四、连接管理:性能关键点 开发者必知实践技巧 一图胜千言:HTTP核心机制图解 一、HTTP本质…

华为静态路由配置

问题描述:针对两台笔记本和两个路由器在不同的网段场景中,对两个路由器进行静态路由配置。下面以如下场景为例,介绍详细配置过程。配置步骤: 1、对每个路由器的接口下配置IP地址 [huawei]interface gx/x/x [huawei-interface]ip a…

闲庭信步使用图像验证平台加速FPGA的开发:第八课——图像数据的行缓存

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注…

经典排序算法

文章目录前言1. 排序的基本概念1.1 排序是什么?1.2 常见的排序算法概览2. 常见排序算法的实现2.1 插入排序 (Insertion Sort)2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 (Shell Sort)2.2 选择排序 (Selection Sort)2.2.1 直接选择排序2.2.2 堆排序 (Heap Sort…

RabbitMQ 消息队列:从入门到Spring Boot实战

RabbitMQ 作为一款开源的、基于 AMQP(Advanced Message Queuing Protocol)协议实现的消息代理,凭借其强大的功能、灵活的路由机制以及出色的性能,在业界得到了广泛的应用。无论是处理高并发订单、异步通知、日志收集还是系统解耦&…

代账行业数字化破局:从“知道”到“做到”,三步走稳赢!

认知!降本!增收!数字化!——这不仅是口号,更是代账行业在激烈竞争和时代变化中生存发展的关键。很多代账同行其实都明白趋势,也知道大概该怎么做。但问题卡在第一步:不知道怎么开始,…

Mac 电脑crontab执行定时任务【Python 实战】

1、crontab -e 编辑定时任务列表 crontab -e查看当前定时任务列表,长按 i 编辑,编辑完之后按 esc 退出编辑,然后输入:wq 保存并提出。 如下: (base) charles@zl ~ % crontab -e58 15 * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/charle…

go go go 出发咯 - go web开发入门系列(三) 项目基础框架搭建与解读

go go go 出发咯 - go web开发入门系列(三) 项目基础框架搭建与解读 往期回顾 go go go 出发咯 - go web开发入门系列(一) helloworldgo go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南 前言 如…

【字节跳动】数据挖掘面试题0014:SQL中count(1), count(*), count(列)区别

文章大纲SQL 中 count(1)、count(*)、count(某列) 的区别一、核心定义与行为差异二、示例说明差异三、性能差异与优化四、适用场景建议五、面试应答要点六、索引扫描与全表扫描1. 索引扫描的触发条件2. 全表扫描的适用场景3. 常见面试问题点Q1:索引扫描一定比全表扫…

Linux面试问题-软件测试

1、你在上一家公司常用的Linux命令有哪些?答:使用vim/vi编辑文件,使用cat,more,less,head查看文件,使用grep过滤日志中的error,使用ps查看进程,使用top查看实时进程,netstat查看端口…

时序数据库的存储之道:从数据特性看技术要点

时序数据的独特挑战时序数据(Time-Series Data)是指按时间顺序记录的一系列数据点,在物联网、金融、工业监控等领域无处不在。与传统数据相比,时序数据具有几个鲜明特点:时间导向性:每个数据点都带有精确的时间戳高写入量&#xf…

【vim中替换】

vim中替换1 : s/在Vim中经常高频使用到的命令:1 : s/ :s 命令的基本语法是 :[range]s/{pattern}/{string}/[flags],其中: • [range] 是可选的范围,用于指定替换的行范围。例如,% 表示全文,10,…

Qt实战:使用QSqlDatabase连接MySQL,并实现增删改查

文章目录一、创建数据表二、连接MySQL数据库三、封装成一个完整的轻量级 ORM 风格类四、实现派生具体模型类五、支持多线程连接池 ORM 事务封装一、创建数据表 数据库名: 我们先创建一个数据库,名字叫 game_db: CREATE DATABASE IF NOT E…

Python脚本保护工具库之pyarmor使用详解

概要 PyArmor是一个专门为Python代码提供加密保护的第三方库,旨在解决Python源代码易被反编译和泄露的安全问题。作为一种动态代码保护工具,PyArmor能够对Python脚本进行混淆和加密处理,有效防止源代码被恶意获取、分析或篡改。该库特别适用于商业软件开发、知识产权保护和…

仓颉编程语言:从入门到精通

为啥要瞅瞅仓颉这玩意儿? 有一说一,现在的编程语言多得跟米一样,对吧?那一门新语言想火,没点绝活儿肯定不行。仓颉(Cangjie)这哥们儿,是华为搞出来的新玩意儿,静态编译的…

线性探针是什么:是一种用于探测神经网络中特定特征的工具

线性探针是什么 线性探针是一种在机器学习和相关领域广泛应用的技术,用于评估预训练模型特征、检测数据中的特定序列等。在不同的应用场景下,线性探针有着不同的实现方式和作用: 评估预训练模型特征:在机器学习中,线性探针是一种评估预训练模型“特征迁移能力”的标准化方…