dart compile în Dart

Comanda dart Dart 2.10 (wasm din Dart 3.4)

Compilează un program Dart într-un executabil nativ, în JavaScript, WebAssembly sau într-un snapshot.

Sintaxă
dart compile exe bin/main.dart -o build/program   # executabil nativ
dart compile js -O2 -o build/app.js web/main.dart  # JavaScript
dart compile wasm web/main.dart                     # WebAssembly
dart compile aot-snapshot | jit-snapshot | kernel bin/main.dart

Ce face dart compile

dart compile exe creează un executabil de sine stătător pentru sistemul curent (macOS, Linux, Windows): pornește aproape instantaneu și rulează pe calculatoare fără SDK-ul Dart. Este forma potrivită pentru unelte de linie de comandă și servere. Compilarea se face doar pentru sistemul pe care rulezi comanda.

dart compile js transformă programul în JavaScript pentru browser (cu -O2 sau mai mult pentru cod optimizat și mai mic), iar dart compile wasm în WebAssembly. Codul care folosește dart:io nu poate fi compilat pentru web.

Celelalte ținte sunt pentru cazuri speciale: aot-snapshot (cod nativ rulat cu dartaotruntime), jit-snapshot (pornire mai rapidă pe VM) și kernel (format intermediar, portabil).

Parametri

Parametru Descriere
exe | js | wasm | aot-snapshot | jit-snapshot | kernel Formatul rezultatului.
-o, --output Fișierul creat. Implicit lângă sursă (ex. bin/main.exe).
-O0 ... -O4 Doar pentru js: nivelul de optimizare.
-D nume=valoare Definește o constantă citită cu String.fromEnvironment.

Exemple

Exemplul 1: Un executabil nativ

Executabilul are câțiva MB (conține și runtime-ul Dart) și se poate copia pe alt calculator cu același sistem de operare.

dart compile exe bin/magazin.dart -o build/magazin
ls -lh build/magazin
./build/magazin Mihai

Rezultat în terminal

Generated: /Users/ana/proiecte/magazin/build/magazin
-rwxr-xr-x  1 ana  staff   5,4M 19 oct 22:10 build/magazin
Bun venit în magazin, Mihai!
Total coș: 43.75 lei

Exemplul 2: Compilare în JavaScript

Se creează fișierul .js, plus o hartă a sursei (.js.map) pentru depanare în browser.

dart compile js -O2 -o build/magazin.js bin/magazin.dart

Rezultat în terminal

Compiled 10,747,659 input bytes (5,318,399 characters source) to 34,059 characters JavaScript in 0.41 seconds

Exemplul 3: Constante la compilare cu -D

Valoarea lui MEDIU este fixată în executabil la compilare. Rulat fără -D, programul ar folosi valoarea implicită „dezvoltare”.

// bin/server.dart
void main() {
  const mediu = String.fromEnvironment('MEDIU', defaultValue: 'dezvoltare');
  print('Pornesc serverul în mediul: $mediu');
}

// în terminal:
// dart compile exe -D MEDIU=productie bin/server.dart -o build/server
// ./build/server

Rezultat în terminal

Generated: /Users/ana/proiecte/magazin/build/server
Pornesc serverul în mediul: productie

Greșeli frecvente

  • Să compilezi pe macOS și să copiezi executabilul pe un server Linux: nu merge. Compilează pe sistemul țintă (de exemplu în Docker sau CI).
  • dart compile js pentru cod care importă dart:io: eroare, biblioteca nu există în browser.
  • Să folosești dart run în producție pentru o unealtă pornită des: fiecare pornire compilează din nou; executabilul pornește mult mai repede.

Comenzi înrudite

  • dart run: Rulează un program Dart: un fișier, programul principal al proiectului sau un executabil dintr-un pachet.
  • external: Declară o funcție sau un câmp al cărui corp este scris în altă parte: în C (dart:ffi), JavaScript sau în SDK.
  • deferred: Import amânat: biblioteca se încarcă abia când apelezi loadLibrary(), util pe web pentru a micșora încărcarea inițială.
  • dart create: Creează un proiect Dart nou dintr-un șablon: aplicație de consolă, pachet, server sau aplicație web.