我已经创建了一个可行的测试蓝图,所以我有点主意,但是我想确保自己正确地解决了这个问题。
我想扩展字段类型提示以提供自定义类型以及String,int,boolean等。
这意味着我需要修改模板,例如template / src / main / java / package / domain / Entity.java.ejs
我的蓝图仅包含generators / client和generators / entity-client,所以我想我必须:
对于模板,我可以从JHipster存储库中复制它们吗? 我是不是该 ?如果没有,为什么不呢?还有什么替代方法?
如果复制它们是正确的举动,我是否必须复制所有内容?还是只是我要修改的? (我尚未检查是否需要修改所有内容)
当JHipster更新时,我想我要么手动合并新文件,要么冒着我的代码与JHipster代码越来越不同的风险?
有没有更简单的方法可以实现我要执行的操作? 如果我能说我想在该提示中添加TypeX和TypeY并提供仅涵盖这些类型的有限模板(例如,用于导入的模板,用于字段的模板以及用于setter和getter的模板),那将是很好的。如果仅提供导入,则使用通用模板。
答案 0 :(得分:1)
我将尽力回答您的所有问题。 首先创建蓝图,我建议甚至在另一个文件夹中也使用https://github.com/jhipster/generator-jhipster-blueprint并复制当前项目所需的全部内容。我认为这更容易,您可以选择要添加的生成器,例如实体服务器和实体。
提示阶段
如果要修改提示阶段,可以将阶段与JHipster这样合并
get prompting() {
const phaseFromJHipster = super._prompting();
const phaseFromMe = {
askForTheme: prompts.askForTheme,
setMySharedConfigOptions() {
this.configOptions.theme = this.theme;
}
};
return { ...phaseFromJHipster, ...phaseFromMe };
}
(来源:https://github.com/avdev4j/samSuffit/tree/master/generators/client)
但是这样做不能修改现有问题,在这种情况下,您应该将所有现有问题复制到蓝图中。
模板管理
您的蓝图与JHipster版本链接。正如我以前所说的(在我的演讲中),除了配置文件,您应该从JHipster复制和修改模板,因为它处理起来有些棘手。对于他们,我更喜欢使用JHipster API(例如“ replaceContent()”)或needle API,该API允许您将一些代码插入某些文件中(例如pom.xml文件中的依赖项)。 当然,您可以使用所需的方式,但是根据经验,我更喜欢控制模板并在升级JHipster版本时将其合并。
您应该只复制要修改的模板,合并JHipster和编写阶段。 JHipster使用yeoman,后者使用memfs处理文件生成。每个文件都在内存中创建并在最后一步转储。您可以轻松覆盖文件而不会影响性能。
get writing() {
const phaseFromJHipster = super._writing();
/* eslint-disable */
const phaseFromSam = {
writeSamFiles() {
if (this.clientFramework === 'angularX') {
return writeAngularFiles.call(this);
}
}
};
/* eslint-enable */
return { ...phaseFromJHipster, ...phaseFromSam };
}
JHipster升级
我建议您在升级JHipster时检查模板,并在需要时应用修改。否则,您可能会遇到错误。另外,我建议在您的蓝图package.json中设置最终版本(如6.1.0)的JHipster。
据我所知,没有办法去做你想做的事。我正在考虑一种轻松修改提示的方法,如果您想贡献自己的想法,则不复制所有其他问题;)。
您可以查看我用于演讲的蓝图样本: https://github.com/avdev4j/samSuffit/
希望它能为您提供帮助,随时问更多。
致谢