|
| 1 | +--- |
| 2 | +name: Premiers pas |
| 3 | +description: "Premiers pas avec Preact. Nous apprendrons comment mettre en place des outils (si nécessaire) et commencerons à écrire une application." |
| 4 | +--- |
| 5 | + |
| 6 | +# Premiers pas |
| 7 | + |
| 8 | +Ce simple guide vous aide à commencer a développer des applications Preact. Il y a 3 moyens populaires de le faire. |
| 9 | + |
| 10 | +Si vous commencez juste nous vous recommandons de commencer avec [preact-cli](#best-practices-powered-with-preact-cli). |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +<toc></toc> |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## Sans aucun outil de construction |
| 19 | + |
| 20 | +Preact a toujours été livré avec une solution prête à être utilisé dans le navigateur. Ce qui ne nécessite aucun outil de construction (build tools). |
| 21 | + |
| 22 | +```js |
| 23 | +import { h, Component, render } from 'https://unpkg.com/preact'; |
| 24 | + |
| 25 | +// Créez votre application |
| 26 | +const app = h('div', null, 'Hello World!'); |
| 27 | + |
| 28 | +// Injectez votre application dans l'élément avec l'id `app`. |
| 29 | +// Faites en sorte que l'élément soit présent dans le dom ;) |
| 30 | +render(app, document.getElementById('app')); |
| 31 | +``` |
| 32 | + |
| 33 | +La seul différence est que vous ne pouvez pas utiliser JSX parce que JSX a besoin d'être transpilé. Nous avons une alternative dans la prochaine section. |
| 34 | + |
| 35 | +### Alternatives à JSX |
| 36 | + |
| 37 | +Écrire une application avec un `h` brut ou un appel `createElement` est bien moins amusant que d'écrire du JSX. JSX à l'avantage de ressembler à du HTML, qui rend la compréhension plus simple pour beaucoup de développeurs. Cela en revanche nécessite une étape pré-construite, alors nous vous recommandons vivement une alternative appelé [htm]. |
| 38 | + |
| 39 | +En un mot, [htm] peut être décrit comme: Une syntaxe JSX en plein Javascript sans avoir besoin de transpiler. Au lieu d'utiliser une syntaxe personnalisé, cela repose sur les littéraux de gabarits (tagged template strings) natif à javascript qui ont été ajouté à Javascript il y a un moment. |
| 40 | + |
| 41 | + |
| 42 | +```js |
| 43 | +import { h, Component, render } from 'https://unpkg.com/preact'; |
| 44 | +import { html, Component, render } from 'https://unpkg.com/htm'; |
| 45 | + |
| 46 | +// Initialize htm with Preact |
| 47 | +const html = htm.bind(h); |
| 48 | + |
| 49 | +const app = html`<div>Hello World!</div>` |
| 50 | +render(app, document.getElementById('app')); |
| 51 | +``` |
| 52 | + |
| 53 | +C'est une façon très populaire d'écrire des applications Preact et nous vous recommandons vivement de lire le [README][htm] de html si vous êtes intéressé par cette méthode. |
| 54 | + |
| 55 | +## Meilleur pratique, avec `preact-cli` |
| 56 | + |
| 57 | +Le projet `preact-cli` a crée la meilleur solution pour livrer des applications Preact à l’empaquetage optimisé pour les meilleurs configurations web. Il est construit avec des outils standard comme `webpack`, `babel` et `postcss`. Du par ca simplicité c'est le choix le plus populaire pour utiliser Preact parmis nos utilisateurs. |
| 58 | + |
| 59 | +Comme le nom l'implique, `preact-cli` est une **c**commande en **l**igne de commande qui peut être utilisé sur le terminal de votre machine. Installez le globalement en lancant: |
| 60 | +```bash |
| 61 | +npm install -g preact-cli |
| 62 | +``` |
| 63 | + |
| 64 | +Après, vous aurez une nouvelle commande dans votre terminal appelé `preact`. Avec celle-ci vous pouvez créer une nouvelle application en utilisant la commande suivante: |
| 65 | + |
| 66 | +```bash |
| 67 | +preact create default my-project |
| 68 | +``` |
| 69 | + |
| 70 | +La commande suivante récupère un modèle depuis `preactjs-template/default`, affiche quelques informations et génère un projet à `./mon-projet`. |
| 71 | + |
| 72 | +> Astuce : Chaque dépot Github qui a un dossier `'template'` peut être utilisé comme un template en utilisant `preact create <nom-utilisateur>/<dépot> <nom-du-projet>` |
| 73 | +
|
| 74 | +### Premiers pas pour le développement |
| 75 | + |
| 76 | +Nous somme prêt à commencer notre application. Pour lancer le serveur de développement, tapez la commande suivante dans le dossier d'un projet fraichement généré (`mon-projet`) |
| 77 | + |
| 78 | +```bash |
| 79 | +# Go into the generated project folder |
| 80 | +cd my-project/ |
| 81 | + |
| 82 | +# Start the devserver |
| 83 | +npm run dev |
| 84 | +``` |
| 85 | + |
| 86 | +Lorsque le serveur sera lancé vous pourrez accéder à votre application à l'URL qui sera affiché dans la console. Maintenant vous être prêt à développer ! |
| 87 | + |
| 88 | +### Faire un empaquetage de production |
| 89 | + |
| 90 | +Il y a un moments où vous voulez enfin deployer votre application. La commande `preact` livre un outil pratique `build` afin de générer un empaquetage compressé. |
| 91 | + |
| 92 | +```bash |
| 93 | +npm run build |
| 94 | +``` |
| 95 | + |
| 96 | +Après la complétion, vous pouvez utiliser le dossier `build/` nouvellement crée qui peut être déployer directement sur le serveur. |
| 97 | + |
| 98 | +> Pour une liste complète des commandes disponibles vérifiez la liste dans le [fichier README](https://github.com/preactjs/preact-cli#cli-options) de preact-cli. |
| 99 | +
|
| 100 | +## L'intégrer dans une application existante |
| 101 | + |
| 102 | +Si vous avez déjà un processus de travail existant, c'est très possible que vous aillez déjà des outils d'empaquetage. Le choix le plus populaire est [webpack](https://webpack.js.org/), [rollup](https://rollupjs.org) ou [parcel](https://parceljs.org/). Preact fonctionne directement avec chacun d'eux. Aucun changement n'est nécéssaire ! |
| 103 | + |
| 104 | +### Mêttre en place JSX |
| 105 | + |
| 106 | +Pour transpiler JSX, vous avez besoin d'un plugin babel qui converti votre code en Javascript valide. Celui que nous utilisons tous est [@babel/plugin-transform-react-jsx](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx). Une fois installé vous avez besoin de spécifier une fonction JSX qui devrait être utilisé: |
| 107 | + |
| 108 | +```json |
| 109 | +{ |
| 110 | + "plugins": [ |
| 111 | + ["@babel/plugin-transform-react-jsx", { |
| 112 | + "pragma": "h", |
| 113 | + "pragmaFrag": "Fragment", |
| 114 | + }] |
| 115 | + ] |
| 116 | +} |
| 117 | +``` |
| 118 | + |
| 119 | +> [babeljs](https://babeljs.io/) est l'une des meilleurs documentation. Nous vous recommandons vivement de la vérifier pour vos questions concernant babel ou comment le configurer. |
| 120 | +
|
| 121 | +### Aliasing React à Preact |
| 122 | + |
| 123 | +At some point you'll probably want to make use of the vast react ecosystem. Libraries and Components originally written for React work seamlessly with our compatibility layer. To make use of it we need to point all `react` and `react-dom` imports to Preact. This step is called aliasing. |
| 124 | + |
| 125 | +#### Aliasing dans webpack |
| 126 | + |
| 127 | +Pour alias un paquet dans webpack vous devez ajouter la section `resolve.alias` dans votre configuration. |
| 128 | +Suivant la configuration que vous utilisez ceci pourrait déjà être présente mais ayant les alias pour Preact manquant. |
| 129 | + |
| 130 | +```js |
| 131 | +const config = { |
| 132 | + //...snip |
| 133 | + resolve: { |
| 134 | + alias: { |
| 135 | + 'react': 'preact/compat', |
| 136 | + 'react-dom/test-utils': 'preact/test-utils', |
| 137 | + 'react-dom': 'preact/compat', // Doit être en dessous de test-utils |
| 138 | + }, |
| 139 | +} |
| 140 | +``` |
| 141 | +
|
| 142 | +#### Aliasing dans parcel |
| 143 | +
|
| 144 | +Parcel utilise le fichier standard `package.json` pour lire les configurations sous une clé `alias`. |
| 145 | +
|
| 146 | +
|
| 147 | +```json |
| 148 | +{ |
| 149 | + "alias": { |
| 150 | + "react": "preact/compat", |
| 151 | + "react-dom/test-utils": "preact/test-utils", |
| 152 | + "react-dom": "preact/compat" |
| 153 | + }, |
| 154 | +} |
| 155 | +``` |
| 156 | +
|
| 157 | +#### Aliasing dans jest |
| 158 | +
|
| 159 | +Similaire aux empaqueteurs (bundlers), [jest](https://jestjs.io/) permet de réécrire le chemin d'un module. Cette syntaxe est un peut différente que, disons dans webpack, parceque celle-ci est basé sur des regex. Ajoutez ceci dans votre configuration jest: |
| 160 | +
|
| 161 | +```js |
| 162 | +{ |
| 163 | + "moduleNameMapper": { |
| 164 | + "react": "preact/compat" |
| 165 | + "react-dom/test-utils": "preact/test-utils" |
| 166 | + "react-dom": "preact/compat" |
| 167 | + } |
| 168 | +} |
| 169 | +``` |
| 170 | +
|
| 171 | +[htm]: https://github.com/developit/htm |
| 172 | +
|
0 commit comments