jhipster - JHipster 从 6.1.2 升级到 6.2.0 的问题
问题描述
我遇到(并解决了)一个重大的 JHipster 升级错误。我的问题很简单,但首先有一点设置和背景故事,所以我将把它分解成几部分。
(0) 开发环境
(1) 升级问题
(2) 调查/修复策略
(3) 解决方案
(4) 问题
(0) 开发环境
Windows 10、Gradle 5.4.1、节点 10.16.3、npm 6.11.2、yarn 1.16.0、MariaDB 10.3、JDK 11、IntelliJ 2019.2.2、git 2.23.0
我的项目:单体应用,使用 Gradle、Angular、JWT 身份验证、用于测试和生产的 MariaDB,没有搜索。
(1) 升级问题
我的代码是 Matt Raible 的书中概述的 21 点项目:The JHipster Mini-Book v5.0.3。我从 JHipster 6.0 开始我的开发。整个夏天,我定期检查代码,并进行了升级:从 6.0.1 到 6.1.1 到 6.1.2(在每种情况下,在解决了一些冲突之后,项目都会顺利编译和运行)。
上周,我注意到 JHipster 6.2.0 的发布。我制作了 6.1.2 工作代码的副本/备份,更新了生成器(npm update -g generator-jhipster
),应用了升级(jhipster upgrade
),解决了冲突,然后......失败了。堆栈跟踪相当长且涉及。如果有人喜欢,我稍后会添加到帖子中。但是,从本质上讲,测试失败了,应用程序无法启动(仅导致错误页面:“发生错误:-(”,然后是冗长的文本,提示可能出了什么问题,并建议修复)。
恢复到原始代码,一切仍然有效。对两个项目进行比较,唯一的变化是与升级相关的变化。对失败感到惊讶,我挠了挠头,然后做了以下事情。
(2) 调查/修复策略
此时我的项目有两个版本,我将其标记为:(6.1.2-working
升级前的原始代码)和6.2.0-broken
(原始代码+ Jhipster 升级)。
我创建了第三个新项目(我将其称为6.2.0-fresh
),如下所示:
- 创建了一个新目录
6.1.2-working
.yo-rc.json
将文件连同 JDL 文件 (21points.jh
)复制到其中- 在 bash 中,输入:
jhipster
jhipster import-jdl 21points.jh
npm install ng2-nvd3
<-- 因为 Matt Raible 使用了一些图形绘图
6.1.2-working
然后我在和之间进行了比较6.2.0-fresh
,并将功能更改从 迁移6.1.2-working
到6.2.0-fresh
。最终,我得到了新6.2.0-fresh
的按预期运行。从理论上讲,我可以把东西放在那里,但是:
- 我想找到一个合适的升级解决方案,而不是一个“端口”。
- 此方法无法保留我的版本控制历史记录。对于一个正常的项目,我需要保留它。
我在 new6.2.0-fresh
和6.2.0-broken
. 唯一有意义的区别是特定文件的更改:package-lock.json
简单地:
- 将新
package-lock.json
文件复制到6.2.0-broken
根目录 - 删除
6.2.0-broken
node_modules
目录 - 类型:(
npm install
重建node_modules
目录)
6.2.0-broken
我现在可以毫无问题地构建/运行该项目!
(3) 解决方案
从 JHipster 6.1.2 升级到 6.2.0:
- (备份/复制您的工作项目代码......总是一个好主意)
- 执行 JHipster 升级:
npm update -g generator-jhipster
jhipster upgrade
- 查找/解决升级过程产生的任何冲突
- 创建一个新的临时目录
- 将原始
.yo-rc.json
文件以及任何 JDL 文件复制到其中 - 在 bash 的临时根目录中,键入:
jhipster
jhipster import-jdl (...your JDL files...)
npm install (...needed modules...)
- 确保临时项目有效:
./gradlew integrationTest
package-lock.json
将新创建的文件从临时项目根目录复制/覆盖到您的工作项目根目录node_modules
从您的工作项目根目录中删除目录- 类型:
npm install
- 构建/测试/运行您的项目,然后享受
现在一切都应该运行良好。
(4) 问题
- 我遇到的问题普遍吗?
- 有谁知道为什么会这样?这是 JHipster 升级过程的问题吗?或者,它是每个人都知道的 JHipster 升级的自然副产品(尽管在 JHipster 网站上没有记录),而且我很幸运之前没有碰到过?
- 我在升级过程中错过了什么吗?我做错什么了吗?
- 我的解决方案合适吗?它有潜在的问题吗?
- 有没有更好的方法来解决这样的升级问题?升级此类项目的“标准操作程序”?
谢谢!
解决方案
至少 David Steiman(“Xetys”,JHipster UAA 流负责人)知道使用jhipster upgrade
. https://www.youtube.com/watch?v=Gg5CYoBdpVo。
我试着听从他的建议,不要碰生成的类和配置——如果有人试图连接到两个数据库并保持可升级,那就更有趣了。
但这可能只能回答您的最后一个问题,而不是您在从 6.1.2 到 6.2.0 的特定升级中必须进行的深入错误修复的问题。
推荐阅读
- c++ - Boost 等效于 std::getline 的 boost::static_string
- android - 在 com.android.build.gradle.LibraryExtension 类型的对象上找不到参数 [] 的方法 buildFeatures()
- powerapps - 如何消除 Canvas 应用程序中的循环引用错误
- ios - 如何使用 SwiftUI 实现具有样式、文本和图标的可重用按钮?
- git - 在 Git 中创建多个分支
- python - 使 FastAPI WebSockets 的 CPU 绑定任务异步
- firebase - 在 Flutter Web 的文本小部件中显示来自 Firebase 的文档计数
- r - 为首字母缩写词分配全名
- javascript - 选择 Typescript、D3.js 函数重载和返回类型
- r - 为什么我不能使用 tidyr extract 和 regex 拆分此列?