JHipster自定义blueprint生成项目报namespace错误与模板缺失问题
问题根因
两个报错为连锁触发,核心原因是blueprint命名不符合Yeoman与JHipster的强制规范:
- Yeoman生成器的namespace要求全小写,你的blueprint包名
generator-jhipster-QuestionURL包含大写字母,直接导致namespace解析失败,JHipster无法将原生生成器的模板目录注册为备用搜索路径,弹出namespace错误警告。 - 后续的模板找不到错误是前一个问题的直接后果:因为备用模板路径注册失败,JHipster只会在你自己blueprint的
generators/server/templates目录下查找所有待生成文件,你没有重写src/main/docker/jib/entrypoint.sh这类原生模板文件,自然触发文件不存在的报错,导致生成流程中断。
可行解决方案
按以下步骤操作即可修复:
- 统一修改blueprint名称为全小写格式
所有涉及blueprint名称的位置必须全部改成无大写的格式,比如将generator-jhipster-QuestionURL改为generator-jhipster-questionurl或者generator-jhipster-question-url,需要修改的位置包括:- blueprint项目的根文件夹名
- 项目
package.json中的name字段值 - 代码中所有硬编码blueprint名称、namespace的配置项
- 清理旧的链接和缓存
名称修改完成后,在blueprint项目根目录执行以下命令,清除本地npm全局链接和依赖缓存的旧配置:# 移除旧的全局链接 npm unlink # 删除旧的依赖文件 rm -rf node_modules package-lock.json # 重新安装依赖 npm install # 重新注册全局链接 npm link - 验证修复效果
重新运行项目生成命令,此时debug日志中显示的namespace会是全小写格式(比如jhipster-questionurl:server),不会再出现namespace解析警告,原生JHipster的模板路径会被正确加入搜索列表,你未自定义重写的文件会自动从原生模板目录读取,不会再出现模板找不到的报错。
内容的提问来源于stack exchange,提问作者Hervé Labrie-Durand
相关产品推荐
相关产品推荐

