Aller au contenu

Introduction

Résumé

Dans cette section, vous apprendrez comment créer votre propre boilerplate avec Hapify.

Vous pouvez démarrer un boilerplate à partir de zéro ou utiliser un boilerplate pré-existant.

Cette section se concentre sur l'écriture de templates de code. Comme Hapify est un moteur agnostique et n'est pas limité à un cadre spécifique, nous ne nous concentrerons pas sur la structure du boilerplate elle-même. Nous étudierons des exemples de templates courants.

À savoir

Si votre boilerplate utilise npm ou yarn comme gestionnaire de paquets, vous pouvez ajouter le CLI comme dépendance de développement :npm install --save-dev @hapify/cli. Ajoutez également un script dans package.json: "hpf": "hpf". Ainsi vous pourrez définir une version d'Hapify pour votre boilerplate et l'utiliser avec npm run hpf.

Moteurs de templates

Hapify propose trois moteurs de templates. Un boilerplate peut utiliser plusieurs moteurs simultanément.

Ces moteurs ont accès à l'objet modèle. Cet objet, injecté dans les templates, explicite le modèle de données ainsi que toutes ses propriétés et relations, de sorte qu'elles soient facilement accessibles depuis le template.

Moteur de template Hapify

Cette syntaxe est optimisée pour jouer avec l'objet modèle et ses propriétés en utilisant des mots courts. Cela vous permet de gérer des idées complexes avec des phrases simples.

Cette syntaxe a deux variantes :

  • long : facile à lire
  • short : basé sur des abréviations

Les deux variantes peuvent être utilisées dans le même template.

Exemple

Cette boucle en JavaScript :

for (let f of model.fields.list.filter(f => f.searchable && f.type === 'entity')) {
    out += 'Field name: ' + f.names.camel;
}

Sera écrite comme ceci avec la syntaxe Hapify :

<<for Fields searchable and entity f>>
    Field name: <<f camel>>
<<endfor>>
<<@ F se*tE f>>
    Field name: <<f aA>>
<<@>>

Pour

  • Un méta-code facile à lire
  • Un méta-code plus court, rendant le code cible plus lisible
  • Encore plus court avec la variante courte

Contre

  • Une autre syntaxe à apprendre, bien qu'elle soit simple
  • La syntaxe peut ne pas traiter certaines conditions spécifiques

Moteur EJS

Vous pouvez utiliser EJS comme moteur de template. Toutes les fonctionnalités d'EJS sont disponibles, sauf la fonctionnalité include. Cette fonction est volontairement désactivée afin que les templates n'aient pas accès à votre système de fichiers.

Exemple

Cette boucle en JavaScript :

for (let f of model.fields.list.filter(f => f.searchable) {
    out += 'Field name: ' + f.names.camel;
}

Sera écrite comme ceci avec EJS :

<% for (let f of model.fields.list.filter(f => f.searchable) { %>
    Field name: <%= f.names.camel %>
<% } %>

Pour

  • Un moteur de template connu
  • Gère bien les conditions complexes et l'interpolation
  • Plus de flexibilité

Contre

  • Méta-code long, rendant le code cible moins lisible

Moteur JavaScript

Vous pouvez écrire des templates en JavaScript pur.

Ce moteur est très utile pour générer des fichiers JSON.

Exemple

const output = models.map((model) => model.names.snake);
return JSON.stringify(output, null, 2);
const property = (field) => `private ${field.names.camel};`;
return `class ${model.names.pascal} {
    ${model.fields.list.map(property).join('\n    ')}
}`;

Pour

  • Puissant lors de la génération de fichiers de configuration tels que le JSON
  • Très flexible

Contre

  • Difficile de différencier le méta-code du code cible.