> ## Documentation Index
> Fetch the complete documentation index at: https://www.chapterjs.org/llms.txt
> Use this file to discover all available pages before exploring further.

# chapterjs build

> Vérifier chaque fichier de votre bot et le compiler en un seul fichier pour la production

`chapterjs build` vérifie votre bot et le compile pour la production. Tout ce qui peut être faux dans vos fichiers est trouvé ici, avant que quoi que ce soit ne soit en ligne. C’est ce que lance le script `build` de votre projet :

```bash pnpm theme={"theme":{"light":"github-light","dark":"vesper"}}
pnpm build
```

```bash npm theme={"theme":{"light":"github-light","dark":"vesper"}}
npm run build
```

```bash yarn theme={"theme":{"light":"github-light","dark":"vesper"}}
yarn build
```

```bash bun theme={"theme":{"light":"github-light","dark":"vesper"}}
bun run build
```

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
✓ Types checked
✓ Built in .chapterjs/build: 4 commands, 6 events (18 kB)
ℹ Run chapterjs start to put it online.
```

C’est tout : [`chapterjs start`](https://www.chapterjs.org/fr/run/start) fait tourner ce qui a été compilé. La compilation n’a pas besoin de token et ne parle jamais à Discord : lancez-la n’importe où, aussi souvent que vous voulez.

> [!NOTE]
>
> Les codes de sortie et ce qu’écrit la commande sont dans la [référence du CLI](https://www.chapterjs.org/fr/reference/cli.md#chapterjs-build).

## Ce qu’elle fait

**1. Vérifie les types**

Ce que souligne votre éditeur, pour tout le projet d’un coup, avec le TypeScript installé dans votre projet (`tsc -b`). Une erreur arrête la compilation :

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
✗ Your project has type errors, so it was not built:
  src/commands/ban.ts(12,25): error TS18047: 'message.member' is possibly 'null'.
```

Sans TypeScript, ou sans `tsconfig.json`, la compilation le dit et continue :

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
ℹ Types were not checked: TypeScript is not installed in this project (or it has no tsconfig.json).
```

**2. Lance chaque fichier une fois**

Chaque fichier de `src/` est chargé et ce qu’il déclare est vérifié, comme le fait `chapterjs dev` quand vous enregistrez : un nom que Discord refuse, une option sans description, deux déclarations de la même commande... Chaque fichier cassé est signalé, puis la compilation s’arrête :

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
✗ src/commands/poll.ts This command has no description: write it in src/messages/en-US.ts (commands: { "poll": { description: '...' } }), or in the file (description: '...').
✗ This file can't run, so your bot was not built. Fix it and build again: chapterjs dev shows the same errors while you write.
```

Avec plusieurs, la dernière ligne les compte : `✗ These 2 files can't run, so your bot was not built. Fix them and build again: ...`.

**3. Compile votre bot**

Tout votre bot devient **un seul fichier JavaScript**, `.chapterjs/build/bot.js` :

* chaque fichier de `src/` (commandes, événements, composants, tâches, présence, langues), avec ce qu’ils importent de votre projet ;
* seulement ce qui est utilisé : le code que rien n’appelle est laissé de côté ;
* compact, mais avec les noms que vous avez écrits, et une correspondance vers vos fichiers.

Un fichier que le compilateur ne sait pas lire arrête la compilation de la même façon, avec `can't be compiled` dans la dernière ligne.

**4. Lance ce qu’elle a compilé**

Le fichier compilé est chargé une fois, exactement comme la production le chargera. Un fichier qui tourne depuis `src/` mais pas une fois compilé arrête la compilation avec `can't run once compiled` dans la dernière ligne.

Une compilation qui échoue ne laisse rien derrière elle : la compilation précédente est supprimée avant de compiler, pour qu’il n’y ait jamais un bot à moitié compilé à lancer par erreur.

La compilation écrit aussi `.chapterjs/build/build.json` : la version de ChapterJS qui l’a faite, une empreinte de `src/` et si vos fichiers rejoignent des salons vocaux. `chapterjs start` le lit pour savoir si la compilation est celle à lancer.

## La production fait tourner la compilation, pas vos fichiers

Une fois compilé, votre bot ne change pas quand vous modifiez un fichier. Les changements passent en ligne la prochaine fois que vous compilez et relancez ; d’ici là, `chapterjs start` vous le rappelle :

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
⚠ Your files changed since the last build: the bot runs the build, not your changes. Run "chapterjs build" to put them online.
```

Vous pouvez donc continuer à travailler dans le même dossier pendant que votre bot tourne. Une compilation faite par une autre version de ChapterJS n’est pas lancée du tout :

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
✗ This build was made with chapterjs 0.1.3, and this is chapterjs 0.1.4.
  Run "chapterjs build" again.
```

## Les erreurs nomment toujours vos fichiers

Le fichier compilé n’est pas fait pour être lu, mais vous n’avez jamais à le faire : quand quelque chose échoue en production, l’erreur nomme le fichier et la ligne **que vous avez écrits**, parce que la compilation garde une correspondance entre le fichier compilé et vos sources.

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
✗ src/lib/levels.ts:42 Cannot read properties of undefined (reading 'xp')
```

Les noms de vos fonctions et variables sont gardés aussi.

## Ce qui est dans la compilation

| | Dans la compilation |
| - | - |
| Vos commandes, événements, composants, tâches, présence et langues | Oui |
| Ce qu’ils importent de votre projet, où que ce soit | Oui |
| Les fichiers et dossiers qui commencent par `_`, quand quelque chose les importe | Oui |
| Les paquets que vous avez installés | Non : ils restent dans `node_modules`, dont la production a aussi besoin |
| Les fichiers que votre code lit en tournant (un JSON ouvert avec `readFile`, une image...) | Non : gardez-les à côté de votre projet |
| Vos sources | Non : la correspondance ne contient que des noms de fichiers et des lignes |

## Rien à installer

La compilation est faite par [esbuild](https://esbuild.github.io), fourni avec ChapterJS : votre projet n’a rien à ajouter, et rien à configurer. Il n’est chargé que par `chapterjs build` : faire tourner votre bot n’en a jamais besoin.

> [!NOTE]
>
> Avec **pnpm**, un projet a besoin d’un fichier de plus, sinon pnpm refuse de l’installer : esbuild vient avec un script d’installation, et pnpm veut qu’on lui dise quoi en faire. `create chapterjs` écrit ce fichier pour vous ; dans un projet créé autrement, voir [Structure du projet](https://www.chapterjs.org/fr/setup/project-structure.md#avec-pnpm--un-fichier-de-plus).

> [card] [chapterjs start](https://www.chapterjs.org/fr/run/start.md)
>
> Faire tourner pour tout le monde le bot que vous avez compilé.

> [card] [Déployer](https://www.chapterjs.org/fr/run/deploy.md)
>
> Mettre votre bot sur une machine qui reste allumée.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.