Tác vụ thường dùng #
Phiên bản JHipster: 8.0.0
Xem lại “Làm việc với filesystem” trong Yeoman.
Mở rộng package.json
#
Method tiện ích
this.packageJson.merge
cho phép mở rộng bất kỳ giá trị nào trong package.json
. Ở tầng postWriting
:
get [BaseApplicationGenerator.POST_WRITING_PRIORITY]() {
return {
async modifyPackageJson() {
this.packageJson.merge({
scripts: {
'yo:version': 'yo --version'
},
dependencies: {
clsx: '^2.0.0',
'query-string': '^8.1.0',
},
devDependencies: {
tailwindcss: '^3.3.3',
},
peerDependencies: {
react: "^16.0.0",
}
});
},
}
}
Xoá nội dung package.json
#
this.packageJson
về bản chất là một
Yeoman Storage.
get [BaseApplicationGenerator.POST_WRITING]() {
return this.asPostWritingTaskGroup({
async removeDepsPackageJson() {
// 1. Đọc JSON vào một object
const json = this.packageJson.getAll();
// 2. Xoá các key mong muốn
const depsToRemove = {
dependencies: ['@fortawesome/fontawesome-svg-core', '@fortawesome/free-solid-svg-icons', '@fortawesome/react-fontawesome'],
devDependencies: [],
};
Object.keys(depsToRemove).forEach(ns => {
const items = depsToRemove[ns];
// eslint-disable-next-line no-unused-expressions
Array.isArray(items) &&
items.forEach(x => {
_.unset(json, `${ns}.${x}`);
});
});
// 3. Lưu object kết quả xuống file JSON
this.packageJson.writeContent(json);
},
});
}
Sao chép thư mục #
get [BaseApplicationGenerator.POST_WRITING_PRIORITY]() {
return {
async addFolderComponents() {
await this.fs.copy(
this.templatePath('react/src/main/webapp/app/shared/components'),
this.destinationPath('src/main/webapp/app/shared/components')
);
},
}
}
Sao chép file #
get [BaseApplicationGenerator.POST_WRITING_PRIORITY]() {
return {
async addSharedTemplates() {
await this.copyTemplate(
'react/src/main/webapp/app/shared/layout/menus/nav-dropdown.tsx',
'src/main/webapp/app/shared/layout/menus/nav-dropdown.tsx'
);
},
}
}
Thay thế nội dung file #
get [BaseApplicationGenerator.POST_WRITING_PRIORITY]() {
return {
async addSharedTemplates() {
async cleanEntitiesMenu() {
this.editFile(this.destinationPath('src/main/webapp/app/entities/menu.tsx'), content => content.replaceAll(' icon="asterisk"', ''));
},
},
}
}
Xóa file #
get [BaseApplicationGenerator.POST_WRITING_PRIORITY]() {
return {
async removeScssFiles() {
this.deleteDestination('src/main/webapp/app/shared/layout/header/header.scss');
this.deleteDestination('src/main/webapp/app/shared/layout/footer/footer.scss');
},
}
}
Thêm thuộc tính vào entity để dùng trong biểu mẫu #
get [BaseApplicationGenerator.POST_PREPARING_EACH_ENTITY]() {
return this.asPostPreparingEachEntityTaskGroup({
addDerivedField({ entity, entityName }) {
const { fields } = entity
entity.hasStatusField = fields.some(x => x.fieldName === 'status')
},
});
}
Trong một biểu mẫu dành cho entity, ta có thể dùng hasStatusField
:
<%_ if (hasStatusField) { _%>
// This entity has status field
<%_ } _%>
Tham khảo #
Clone repo generator-jhipster-native và đọc code thực hiện các tác vụ:
- Sửa
package.json
. - Xóa file.
- Sửa
pom.xml
. - Sửa code Java.
- Sửa Cypress.