建立藍圖
JHipster藍圖是Yeoman產生器,它是由特定的JHipster子產生器composed 來擴充套件該子產生器的功能的。 藍圖可以覆蓋子產生器的任何已定義的getter,並提供其自己的樣板和功能。
JHipster藍圖在帶有jhipster-blueprint
標籤的JHipster市場 上列出。
這允許建立可以覆蓋JHipster特定部分(例如僅用戶端樣板)的第三方藍圖。
使用藍圖
要使用藍圖,請執行以下指令
jhipster --blueprint <blueprint name>
例子
JHipster Kotlin 藍圖用等效的Kotlin程式碼替換了大多數伺服器端Java程式碼。
這是我們的官方藍圖,展示了如何建立自己的藍圖。
JHipster範例藍圖 顯示瞭如何覆蓋用戶端子產生器。
或者,您可以使用JHipster藍圖產生器 來幫助您初始化藍圖。
要使用JHipster藍圖產生器,請執行以下指令
npm install -g generator-jhipster-blueprint
mkdir my-blueprint && cd my-blueprint
yo jhipster-blueprint
在回答問題時選擇您要覆蓋的子產生器。
JHipster藍圖的基本規則
JHipster藍圖:
- 是NPM軟體套件,並且是Yeoman產生器。
- 遵循http://yeoman.io/generators/ 上列出的Yeoman規則的擴充套件,並且可以使用
yo
指令進行安裝,使用和更新。 它不是由generator-
字首,而是以generator-jhipster-
字首,並且不僅具有yeoman-generator
關鍵字,還必須具有兩個關鍵字,即yeoman-generator
和jhipster-blueprint
。 - 藍圖只能擴充套件以下子產生器(在generators資料夾下)
- common
- client
- server
- entity
- entity-client
- entity-server
- entity-i18n
- languages
- spring-controller
- spring-service
匯入generator-jhipster
JHipster藍圖必須具有generator-jhipster作為依賴項,並且應該匯入適當的子產生器以覆蓋它。
const chalk = require('chalk');
const ClientGenerator = require('generator-jhipster/generators/client');
...
module.exports = class extends ClientGenerator {
constructor(args, opts) {
super(args, Object.assign({ fromBlueprint: true }, opts)); // fromBlueprint variable is important
const jhContext = this.jhipsterContext = this.options.jhipsterContext;
if (!jhContext) {
this.error(`This is a JHipster blueprint and should be used only like ${chalk.yellow('jhipster --blueprint helloworld')}`);
}
this.configOptions = jhContext.configOptions || {};
// This sets up options for this sub generator and is being reused from JHipster
jhContext.setupClientOptions(this, jhContext);
}
get initializing() {
// Here we are not overriding this phase and hence its being handled by JHipster
return super._initializing();
}
// other phases of the sub generator
}
任何以_
開頭的方法透過super.
的形式都可以在繼承類別中使用,例如上例中的ClientGenerator
。
每個JHipster子產生器都由多個yeoman階段組成,每個階段都是一個getter
,例如get initializing
。 藍圖可以自定義其覆蓋的子產生器的一個或多個階段。
有多種方法可以從JHipster定製階段。
1) 讓JHipster處理一個階段,藍圖不會覆蓋任何內容。
get initializing() {
return super._initializing();
}
2) 覆蓋整個階段,藍圖將控制這一階段。
get initializing() {
return {
myCustomInitPhaseStep() {
// Do all your stuff here
},
myAnotherCustomInitPhaseStep(){
// Do all your stuff here
}
};
}
3) 部分覆蓋階段,藍圖從JHipster獲取階段並對其進行自定義。
get initializing() {
const phaseFromJHipster = super._initializing();
const myCustomPhaseSteps = {
displayLogo() {
// 重寫JHipster中_initializing階段的displayLogo方法
},
myCustomInitPhaseStep() {
// 你自己的業務邏輯
},
}
return Object.assign(phaseFromJHipster, myCustomPhaseSteps);
}
您還可以直接從藍圖訪問JHipster的變數和函式。
可用的變數和功能
設定中的變數:
您可以訪問.yo-rc.json
中的設定,該設定將同時包含JHipster設定和您的藍圖設定。
全域變數:
您可以使用在 generator-constants中的常數:
const javaDir = `${jhipsterConstants.SERVER_MAIN_SRC_DIR + this.packageFolder}/`;
const resourceDir = jhipsterConstants.SERVER_MAIN_RES_DIR;
const webappDir = jhipsterConstants.CLIENT_MAIN_SRC_DIR;
功能:
您可以使用generator-base 中所有功能:
this.angularAppName = this.getAngularAppName(); // 獲取Angular應用程式名稱。
this.printJHipsterLogo(); // 列印JHipster徽標
注意: generator-base.js
中的功能和 generator-constants.js
中的變數是公共API的一部分,因此將遵循semver版本控制。但是其他檔案如generator-base-private.js
、utils.js
等將不會遵循semver版本控制,並且可能會在次要版本中破壞方法簽名。
開發中執行本地藍圖版本
在開發藍圖期間,請注意以下步驟。 他們非常重要。
- 全域連結您的藍圖
注意:如果您不想將藍圖(第3步)連結到正在建立的每個專案,請使用NPM而不是Yarn,因為yeoman似乎無法獲取全域連結的Yarn模組。 另一方面,這意味著您還必須在以下所有步驟中使用NPM。
cd my-blueprint
npm link
- 將JHipster的開發版本連結到您的藍圖(可選:僅當您要使用未發布的JHipster版本(例如master分支或您自己的自定義fork)時才需要)
cd generator-jhipster
npm link
cd my-blueprint
npm link generator-jhipster
- 為要生成的應用程式建立一個新檔案夾,並在其中連結JHipster和您的藍圖
mkdir my-app && cd my-app
npm link generator-jhipster-myblueprint
npm link generator-jhipster (可選:僅在使用未發布的JHipster版本時才需要)
jhipster -d --blueprint myblueprint
向JHipster市場註冊藍圖
為了在JHipster市場中能夠找到你的藍圖,您需要確保在已發布的npm套件package.json
中有兩個關鍵字yeoman-generator
和jhipster-blueprint
。
如果您在市場上找到不是JHipster模組或藍圖的任何條目,則可以透過將其新增到modules-config.json檔案的blacklistedModules
部分中來將其列入黑名單,方法是對 [jhipster/jhipster.github.io專案] (https://github.com/jhipster/jhipster.github.io) 發出拉取請求
一旦您將藍圖發布到NPM,您的藍圖就會在我們的市場上出現。