Hiểu biết tổng quan #
Phiên bản JHipster: 8.0.0
Mã nguồn JHipster #
Khi có ý định tùy biến code, bạn cần khoanh vùng xem cần tác động đến các sub-generator nào trong
generator-jhipster
để sinh được code như ý muốn. Do đó bạn cần clone
generator-jhipster
về máy để:
- Tra cứu mọi thứ nhanh chóng.
- Sao chép code, đặc biệt là biểu mẫu về blueprint rồi sửa trên đó.
Ghi nhớ
Bạn phải checkout đến đúng tag release tương ứng với phiên bản JHipster đang cài ở máy.
Nguyên lý sub-generator #
Kiến trúc và tên gọi class của v8 có nhiều thay đổi so với v7, đáng chú ý là mọi blueprint sẽ kế thừa từ lớp BaseApplicationGenerator
chứ không phải từ lớp của sub-generator gốc như v7.
flowchart LR subgraph JHipster CoreGenerator --> YeomanGenerator BaseGenerator --> CoreGenerator BaseApplicationGenerator --> BaseGenerator CypressGenerator --> BaseApplicationGenerator AngularGenerator --> BaseApplicationGenerator VueGenerator --> BaseApplicationGenerator HerokuGenerator --> BaseApplicationGenerator ClientGenerator --> BaseApplicationGenerator ReactGenerator --> BaseApplicationGenerator LanguagesGenerator --> BaseApplicationGenerator ServerGenerator --> BaseApplicationGenerator JavaGenerator --> BaseApplicationGenerator end subgraph MyBlueprint MyClientGenerator --> BaseApplicationGenerator MyReactGenerator --> BaseApplicationGenerator MyLanguagesGenerator --> BaseApplicationGenerator MyServerGenerator --> BaseApplicationGenerator MyJavaGenerator --> BaseApplicationGenerator end
Danh sách đầy đủ các generator tại:
generators/generator-list.mjs
Tổ tiên của mọi sub-generator là YeomanGenerator
, nên bạn có thể sử dụng API của Yeoman trong mọi sub-generator.
Ôn lại về Yeoman tại đây.
Nguyên tắc khi viết blueprint:
Khi cần tác động đến code sinh bởi sub-generator nào, bạn cần kế thừa sub-generator đó. Hãy nhìn các sub-generator của
MyBlueprint
ở diagram phía trên.
BaseGenerator #
Đường dẫn:
generators\generator-base.js
BaseGenerator
là lớp cha, mà như tên gọi, đóng vai trò lớp nền tảng của generator JHipster. BaseGenerator
đã thêm mới cũng như override nhiều method phục vụ cho nghiệp vụ của JHipster, mà các lớp con kế thừa có thể khai thác.
- Thông tin ứng dụng
getFrontendAppName
- Caching
addEntryToEhcache
- Build tool
addNpmScript
buildApplication
addMavenRepository
addMavenPlugin
addGradleProperty
addGradlePlugin
- Filesystem
writeFilesToDisk
editFile
Danh sách đầy đủ các method các bạn không cần nhớ, hãy tra cứu trực tiếp trong source của generator-jhipster
khi cần.
BaseBlueprintGenerator #
Đường dẫn:
generators\generator-base-blueprint.js
Lớp con của BaseGenerator
và là lớp cha trực tiếp của mọi sub-generator JHipster. Method quan trọng nhất trong lớp này là
composeWithBlueprints
. Mỗi lớp con trực tiếp đều gọi đến method này.
Priority #
Xem lại priority trong Yeoman.
v8 mở rộng lên 21 tầng so với 12 tầng trong v7.
flowchart TD INI1["**initializing**"] PRO2["**prompting**"] CON3["**configuring**"] COM4["**composing**"] LOA5["**loading**"] PRE6["**preparing**"] CON7["**configuringEachEntity**"] LOA8["**loadingEntities**"] PRE9["**preparingEachEntity**"] PRE101["**preparingEachEntityField**"] PRE111["**preparingEachEntityRelationship**"] POS121["**postPreparingEachEntity**"] DEF131["**default**"] WRI141["**writing**"] WRI151["**writingEntities**"] POS161["**postWriting**"] POS171["**postWritingEntities**"] LOA181["**loadingTranslations**"] INS191["**install**"] POS202["**postInstall**"] END212["**end**"] subgraph JHipster priorities in Run loop INI1 --> PRO2 --> CON3 --> COM4 --> LOA5 --> PRE6 --> CON7 --> LOA8 --> PRE9 --> PRE101 --> PRE111 --> POS121 --> DEF131 --> WRI141 --> WRI151 --> POS161 --> POS171 --> LOA181 --> INS191 --> POS202 --> END212 end