# Uruchamianie w trybie debug i release

> Opcje Total.run() wybierają tryb debug lub release; odczytuj tryb z DEBUG i ograniczaj trasy do jednego trybu przez @debug i @release.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: pl
Content-SHA256: 7f92a33b624840729f910650e709359490abf57f0bac51c5eab35e182bbdd640
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Total.js działa w jednym z dwóch trybów, **debug** do programowania i **release** na serwer, a globalna wartość logiczna `DEBUG` mówi Twojemu kodowi, który jest aktywny. W trybie debug aplikacja działa pod watcherem plików, który restartuje ją po zmianie pliku, błędy pokazują szczegóły i generowane są source mapy. Tryb release nie ma watchera, a strony błędów nie pokazują szczegółów technicznych.

Tryb wybiera sposób uruchomienia aplikacji, w skrypcie startowym (`index.js`) wywołującym `Total.run(options)`:

- domyślnie jest debug, z watcherem;
- `options.release = true` uruchamia tryb release; skrypt startowy generowany przez Total.js ustawia to z wiersza poleceń, więc `node index.js --release` to sposób na uruchomienie produkcji;
- `options.watcher = false` uruchamia jeden proces bez watchera i jest to zawsze tryb release (używają go przykłady z tej książki kucharskiej).

Zanim `Total.run()` zdecyduje, `DEBUG` ma wartość domyślną z `NODE_ENV`: jest `false`, gdy `NODE_ENV=production`, a w przeciwnym razie `true`. Kod uruchamiany w chwili ładowania modułu widzi tę wartość domyślną, więc nie polegaj na `NODE_ENV` dla ostatecznego trybu, tylko na `DEBUG` po uruchomieniu aplikacji.

Trasy mogą podążać za trybem. Flaga `@debug` sprawia, że trasa istnieje tylko w trybie debug, a `@release` tylko w trybie release; w drugim trybie adres URL odpowiada 404. Używaj `@debug` dla narzędzi potrzebnych podczas programowania (przeglądarka bazy danych, trasa z danymi testowymi), aby nigdy nie trafiły przypadkiem na produkcję.

```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' });
}
```
