# Exécuter en mode debug et en mode release

> Les options de Total.run() choisissent entre le mode debug et le mode release ; lisez le mode avec DEBUG et limitez des routes à un mode avec @debug et @release.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: fr
Content-SHA256: 381eb27361b0e0d3708162dbba223653f7c87f468a189c43dcd4156bbe63b250
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Total.js fonctionne dans l'un de deux modes, **debug** pour le développement et **release** pour le serveur, et le booléen global `DEBUG` indique à votre code lequel est actif. En mode debug, l'application s'exécute sous un watcher de fichiers qui la redémarre quand vous modifiez un fichier, les erreurs affichent des détails et des source maps sont générées. Le mode release n'a pas de watcher et ses pages d'erreur ne montrent pas les détails techniques.

Le mode est choisi par la façon dont l'application est démarrée, dans le script de démarrage (`index.js`) qui appelle `Total.run(options)` :

- par défaut, c'est debug, avec le watcher ;
- `options.release = true` démarre le mode release ; le script de démarrage généré par Total.js l'active depuis la ligne de commande, donc `node index.js --release` est la façon de démarrer la production ;
- `options.watcher = false` exécute un seul processus sans watcher, et c'est toujours le mode release (c'est ce qu'utilisent les exemples de ce livre de recettes).

Avant que `Total.run()` ait décidé, `DEBUG` a une valeur par défaut tirée de `NODE_ENV` : elle vaut `false` quand `NODE_ENV=production` et `true` sinon. Le code qui s'exécute au moment du chargement d'un module voit cette valeur par défaut ; ne vous fiez donc pas à `NODE_ENV` pour le mode final, seulement à `DEBUG` une fois l'application démarrée.

Les routes peuvent suivre le mode. Le flag `@debug` fait exister une route uniquement en mode debug et `@release` uniquement en mode release ; dans l'autre mode, l'URL répond 404. Utilisez `@debug` pour les outils dont vous avez besoin pendant le développement (un visualiseur de base de données, une route de données de test) afin qu'ils n'arrivent jamais en production par accident.

```js controllers/mode.js
exports.install = function() {
	ROUTE('GET /mode/', mode);
	ROUTE('GET /tools/ @debug', tools);
	ROUTE('GET /status/ @release', status);
};

function mode($) {
	$.json({ debug: DEBUG });
}

function tools($) {
	$.json({ tools: true });
}

function status($) {
	$.json({ status: 'ok' });
}
```
