Prettier: ένα στυλ για όλο τον κώδικα, χωρίς διαφωνίες
Το Prettier είναι ένα εργαλείο που διαβάζει τα αρχεία κώδικά σου και τα ξαναγράφει σε μία και μόνη, σταθερή μορφή — αποφασίζει πού μπαίνει κενό, πού κόμμα, πού αγκύλη και πόση εσοχή — ώστε η ομάδα να μην ξοδεύει χρόνο σε διαφωνίες για το στυλ και να μην υπάρχουν διαφορές μόνο για την εμφάνιση του κώδικα.

Τι κάνει
Σκέψου δύο προγραμματιστές που κοιτούν την ίδια αλλαγή κώδικα. Ο ένας βάζει την αγκύλη στην ίδια γραμμή με τη συνάρτηση, ο άλλος την κατεβάζει στην επόμενη. Δεν διαφωνούν για το τι κάνει ο κώδικας — διαφωνούν για το πώς δείχνει. Αυτή η συζήτηση, πολλαπλασιασμένη σε εκατό αλλαγές τον μήνα, τρώει χρόνο που δεν πάει πουθενά. Το Prettier υπάρχει για να τελειώνει αυτή τη συζήτηση μία φορά και για πάντα.
Είναι ένας μορφοποιητής (formatter): διαβάζει τα αρχεία του κώδικά σου και τα ξαναγράφει με ένα ενιαίο σύνολο κανόνων. Πού μπαίνει κενό μετά το κόμμα, πού ανοίγει και πού κλείνει η αγκύλη, πόσο βαθιά είναι μια εσοχή, πόσο μακριά επιτρέπεται να φτάσει μια γραμμή πριν σπάσει — όλα αυτά τα αποφασίζει το εργαλείο, με τον ίδιο τρόπο, κάθε φορά, σε κάθε αρχείο. Δεν τα αποφασίζεις εσύ, και δεν τα αποφασίζει ο καθένας χωριστά.
Το νόημα κρύβεται σε μια λέξη που χρησιμοποιούν οι ίδιοι οι κατασκευαστές: το Prettier είναι opinionated, δηλαδή «ιδιότροπο». Έχει άποψη. Δεν το ρυθμίζεις σε κάθε λεπτομέρεια — του δίνεις λίγες επιλογές με το χέρι (πόσο πλατιά να είναι η γραμμή, αν τα εισαγωγικά είναι διπλά ή μονά, αν βάζει κόμμα στο τέλος) και κατά τα άλλα αποφασίζει το ίδιο. Αυτό δεν είναι ελάττωμα, είναι ο λόγος που υπάρχει: μία απόφαση για όλους, μία φορά, τέλος οι διαφωνίες.
Στην πράξη το τρέχεις με δύο τρόπους. Ο πρώτος είναι ο έλεγχος: του λες «κοίταξε αυτά τα αρχεία και πες μου αν κάποιο δεν είναι στη σωστή μορφή» — και σου απαντά χωρίς να αγγίξει τίποτα. Ο δεύτερος είναι η διόρθωση: του λες «ξαναγράψ’ τα», και τα ξαναγράφει. Αυτοί οι δύο τρόποι είναι και το κλειδί για να το βάλεις στη ροή της δουλειάς: μπορεί να τρέχει κάθε φορά που σώζεις ένα αρχείο στον editor σου, μπορεί να τρέχει πριν σταλεί μια αλλαγή (το λεγόμενο «pre-commit hook»), μπορεί να τρέχει αυτόματα στον διακομιστή που δέχεται τις αλλαγές της ομάδας (το «CI»).
Και δεν αφορά μόνο τη JavaScript. Το Prettier μορφοποιεί TypeScript, JSON, CSS, HTML, Markdown, YAML και άλλες γλώσσες — δηλαδή ένα εργαλείο καλύπτει σχεδόν ό,τι συναντάς σε ένα σύγχρονο έργο.
Τα μεγέθη μιλούν μόνα τους. Σήμερα, όπως τα διάβασα στο αποθετήριο και στο μητρώο πακέτων: 52.408 αστέρια στο GitHub, 5.029 forks, 182.688.964 λήψεις την εβδομάδα — περισσότερες από εκατόν ογδόντα εκατομμύρια φορές την εβδομάδα κατεβάζει κάποιος αυτό το πακέτο. Το αποθετήριο υπάρχει από τον Νοέμβριο του 2016 και η τελευταία αλλαγή του κώδικα ήταν σήμερα. Δεν είναι ένα εργαλείο που άφησε κάποιος στη γωνία.
Τι δεν κάνει
Το πιο σημαντικό να ξέρεις: το Prettier δεν είναι linter. «Linter» είναι το εργαλείο που ψάχνει λάθη λογικής και κακές πρακτικές — σου λέει «αυτή η μεταβλητή δεν χρησιμοποιείται πουθενά», «αυτή η συνάρτηση είναι πολύ μεγάλη», «αυτή η κλήση είναι παλιά και δεν έπρεπε να χρησιμοποιηθεί». Το Prettier δεν κάνει τίποτα από αυτά. Δεν βρίσκει λάθη, δεν προτείνει καλύτερο τρόπο, δεν σε προειδοποιεί για τίποτα. Αλλάζει μόνο την εμφάνιση. Τη συμπεριφορά του κώδικα δεν την αγγίζει — και αυτό δεν είναι υπόσχεση, είναι μετρημένο: το έτρεξα σε ένα πρόγραμμα πριν και μετά τη μορφοποίηση, και η έξοδος ήταν ίδια, κατά λέξη.
Δεύτερο: δεν διορθώνει σπασμένο κώδικα. Αν ένα αρχείο έχει συντακτικό λάθος, το Prettier δεν προσπαθεί να μαντέψει τι εννοούσες — αρνείται να το αγγίξει και σου δείχνει το σφάλμα. Αυτό είναι σωστό: ένα εργαλείο που διορθώνει με μαντεψιές είναι πιο επικίνδυνο από ένα που σταματά.
Τρίτο: δεν είναι διακομιστής ούτε υπηρεσία. Δεν φορτώνει «σχήμα» σε κάποιο μοντέλο, δεν στέλνει τον κώδικά σου κάπου απομακρυσμένα, δεν έχει λογαριασμό και κλειδί. Είναι μια εντολή που τρέχει στο δικό σου μηχάνημα, σε ένα τερματικό, και τελειώνει εκεί.
Και τέταρτο: δεν αντικαθιστά τον έλεγχο κώδικα από άνθρωπο. Κάνει μια κατηγορία σχολίων περιττή — όλα τα «βάλε κι άλλη εσοχή εδώ» — αλλά δεν κρίνει αν ο κώδικας είναι σωστός ή αν λύνει το σωστό πρόβλημα. Αυτό παραμένει δική σου δουλειά, ή δουλειά κάποιου άλλου.
Δύο λέξεις πρώτα
Formatter (μορφοποιητής): πρόγραμμα που ξαναγράφει το κείμενο του κώδικα με σταθερή μορφή, χωρίς να αλλάζει αυτό που κάνει. Ό,τι κάνει ένας διορθωτής κειμένου στις παραγράφους, το κάνει αυτό στις γραμμές κώδικα.
Opinionated (ιδιότροπο): που έχει τη δική του άποψη και δεν τη διαπραγματεύεται σε κάθε λεπτομέρεια. Στα εργαλεία αυτό είναι καλό: σημαίνει ότι υπάρχει μία απάντηση στο «πώς πρέπει να δείχνει αυτό», άρα κανείς δεν χρειάζεται να τη συζητήσει.
Linter: εργαλείο που ψάχνει λάθη και ύποπτες πρακτικές στον κώδικα — γραμμές που δεν χρησιμοποιούνται, κλήσεις που είναι λάθος, παγίδες. Είναι διαφορετική δουλειά από τη μορφοποίηση, και συνήθως τα δύο δουλεύουν μαζί.
Pre-commit hook: ένα μικρό script που τρέχει πριν μια αλλαγή καταχωρηθεί στο τοπικό αρχείο ιστορικού. Αν το βάλεις να τρέχει το Prettier εκεί, καμία άμορφη αλλαγή δεν φτάνει ποτέ παραπέρα.
CI (συνεχής ενσωμάτωση): ο αυτόματος διακομιστής που τρέχει ελέγχους κάθε φορά που κάποιος στέλνει αλλαγές σε ένα αποθετήριο. Αν βάλεις εκεί τον έλεγχο (όχι τη διόρθωση) του Prettier, μια αλλαγή με ασυνεπή μορφή απορρίπτεται πριν τη δει άνθρωπος.
Για ποιον είναι
Για ομάδες. Όσο πιο πολλά χέρια αγγίζουν τον ίδιο κώδικα, τόσο περισσότερες είναι οι διαφωνίες για το στυλ — και το Prettier τις κάνει περιττές, γιατί δεν υπάρχει πια «το στυλ του καθενός», υπάρχει ένα.
Για όποιον συντηρεί παλιό κώδικα. Όταν «ισιώσεις» μια φορά όλα τα αρχεία με το Prettier, κάθε επόμενη αλλαγή δείχνει μόνο τι άλλαξε στην ουσία, όχι πού μετακινήθηκε ένα κενό. Οι διαφορές στα αρχεία γίνονται μικρότερες και πιο ευανάγνωστες.
Και για όποιον δουλεύει μόνος αλλά έχει πολλές γλώσσες σε ένα έργο: ένα εργαλείο, ένα αρχείο ρυθμίσεων, όλα στη σειρά.
Δεν είναι όμως για όποιον θέλει να αποφασίζει κάθε κόμμα ξεχωριστά. Αν το στυλ του κώδικα είναι κάτι που το χτίζεις με το χέρι και δεν το παραδίνεις σε εργαλείο, το Prettier θα σε ενοχλήσει — γιατί ακριβώς του παραδίνεις την απόφαση.
Εγκατάσταση
Οι εντολές είναι για περιβάλλον Node, από το τερματικό. Η καθεμία σε δικό της πλαίσιο, μία κάτω από την άλλη:
mkdir ptest && cd ptestnpm init -ynpm install --save-dev prettier@3.9.10Έλεγξε ότι μπήκε σωστά:
npx prettier --versionΤο Prettier δουλεύει και χωρίς καμία ρύθμιση — είναι το νόημά του. Αν θέλεις να αλλάξεις λίγες πράγματα, βάζεις ένα αρχείο .prettierrc:
{
"printWidth": 80,
"singleQuote": true
}Και δύο έτοιμες εντολές στο package.json, για να μη θυμάσαι το πλήρες όνομα κάθε φορά:
"scripts": {
"format": "prettier --write .",
"format:check": "prettier --check ."
}Για να το βάλεις πριν από κάθε καταχώρηση αλλαγής, το πιο απλό είναι ένα αρχείο .git/hooks/pre-commit:
#!/bin/sh
npm run format:check || exit 1Χρήση σε κάθε LLM
Το Prettier δεν είναι διακομιστής. Δεν έχει λίστα εργαλείων, δεν έχει σχήμα, δεν συνδέεται σε κανένα μοντέλο. Είναι εντολή με υποεντολές (--check, --write), και σε όποιον βοηθό κι αν το δώσεις, η χρήση είναι η ίδια γραμμή κελύφους.
Claude Code
Πες του στα λόγια «μορφοποίησε αυτό το αρχείο με το Prettier» ή δώσ’ του την εντολή απευθείας:
npx prettier --write path/to/file.jsCodex CLI
Ζήτα το με λόγια («τρέξε τον έλεγχο μορφοποίησης στο src») κι εκείνο μεταφράζει σε εντολή κελύφους:
npx prettier --check src/**/*.jsnpx prettier --write src/**/*.jsCursor
Ίδιο σχήμα — από το ενσωματωμένο τερματικό, ή ζητώντας το στο chat:
npx prettier --write path/to/file.jsΤο μόνο που αξίζει να κρατήσεις: ένα εργαλείο γραμμής εντολών δεν χρειάζεται να «δηλωθεί» πουθενά για να το χρησιμοποιήσει ένας βοηθός — αρκεί να ξέρει την εντολή.
Πού κερδίζει, πού χάνει
Κερδίζει στον χρόνο που δεν ξοδεύεται: όταν η μορφή δεν είναι θέμα συζήτησης, ο έλεγχος κώδικα ασχολείται μόνο με την ουσία. Κερδίζει στη σταθερότητα: ο ίδιος κανόνας σε κάθε αρχείο σημαίνει ότι κανείς δεν «φέρνει» το δικό του στυλ σε ένα ξένο έργο, και ένας νέος συνεργάτης δεν χρειάζεται να μάθει εσωτερικές συμβάσεις. Και κερδίζει στην ανάγνωση των διαφορών: όταν κάθε αλλαγή περνά από το εργαλείο, τα συγκριτικά αρχεία δείχνουν τι άλλαξε στη λογική, όχι πού μετακινήθηκε ένα κενό.
Χάνει στον έλεγχο: αν έχεις ένα πολύ ιδιαίτερο στυλ που δεν καλύπτεται, θα χρειαστείς προσαρμογές ή άλλο εργαλείο από πάνω. Χάνει επίσης όποιος το περιμένει για κάτι που δεν κάνει: δεν βρίσκει λάθη (χρειάζεσαι linter), δεν διορθώνει σπασμένη σύνταξη (σταματά και σου δείχνει πού). Και θέλει μια μικρή αλλαγή νοοτροπίας: παραδίνεις την απόφαση του στυλ σε ένα εργαλείο, και το εργαλείο δεν διαπραγματεύεται.
Ένα πρακτικό που θα το συναντήσεις με το καλημέρα: την πρώτη φορά που θα τρέξεις το Prettier σε ένα έργο που υπάρχει καιρό, θα ξαναγράψει πολλά αρχεία μαζί — και η πρώτη αλλαγή θα φαίνεται τεράστια, ενώ στην ουσία δεν άλλαξε τίποτα στη λογική. Αυτό τρομάζει όποιον κοιτά τη σύγκριση. Η λύση είναι γνωστή: κάν’ την πρώτη μορφοποίηση σε δικό της, ξεχωριστό πέρασμα, πες στους άλλους «αυτή η αλλαγή είναι μόνο μορφή», και από την επόμενη μέρα κάθε σύγκριση δείχνει μόνο την πραγματική δουλειά.
Δοκιμή
Έστησα έναν καθαρό φάκελο και έτρεξα τα βήματα ακριβώς όπως τα γράφει πιο πάνω. Οι μετρήσεις:
mkdir ptest && cd ptest
npm init -y
npm install --save-dev prettier@3.9.10Έφτιαξα ένα αρχείο test.js με σκόπιμα άμορφο κώδικα — διπλά κενά, αγκύλες κολλημένες στην ίδια γραμμή, ασυνεπή εσοχή — και μέσα του έβαλα μια λέξη-παγίδα, τη TRAP-OK-36, για να ξέρω αν το εργαλείο όντως ξαναγράφει αυτό το αρχείο και δεν βγάζει κάτι άσχετο. Μετά:
npx prettier --check test.js
npx prettier --write test.jsΑποτελέσματα, μετρημένα:
- Η εγκατάσταση πήρε 3 δευτερόλεπτα και άφησε 9,7 MB στον δίσκο — σε ένα πακέτο, χωρίς καμία μεταβατική εξάρτηση. Η έκδοση που μπήκε ήταν η 3.9.10.
- Το
--checkπάνω στο άμορφο αρχείο γύρισε κωδικό εξόδου 1 και τύπωσε «Code style issues found». Δηλαδή σου λέει αν το αρχείο θέλει μορφοποίηση χωρίς να το αγγίξει. - Το
--writeγύρισε κωδικό 0 και ξαναέγραψε το αρχείο: έβαλε κενό μετά τα κόμματα, άνοιξε τις αγκύλες σε δικές τους γραμμές, τακτοποίησε την εσοχή, ευθυγράμμισε τα βελάκια των συναρτήσεων. Και η λέξη-παγίδαTRAP-OK-36έμεινε μέσα στο αρχείο — δεν έχασε ούτε γράμμα. - Και η απόδειξη ότι δεν αλλάζει τη συμπεριφορά: έτρεξα το πρόγραμμα πριν και μετά τη μορφοποίηση — ίδια έξοδος, κατά λέξη.
Και η αστοχία, γιατί αυτό είναι το πιο χρήσιμο κομμάτι: έδωσα σκόπιμα ένα αρχείο με σπασμένη σύνταξη — μια παρένθεση που λείπει. Το Prettier αρνήθηκε να το αγγίξει, γύρισε κωδικό εξόδου 2, και είπε ακριβώς πού: SyntaxError: Unexpected token, expected "," (1:17) — με τη γραμμή και τη στήλη, και με ένα βελάκι κάτω από το σημείο που δεν ταιριάζει. Δηλαδή δεν μαντεύει μπροστά σε σπασμένο κώδικα: σκάει, δείχνει πού, και δεν αφήνει άρτιο αποτέλεσμα πίσω του.
Τι κοστίζει
Δεν είναι διακομιστής MCP, οπότε δεν φορτώνει σχήμα στο μοντέλο: μηδέν tokens και από τις δύο πλευρές. Το κόστος εδώ είναι δίσκος, χρόνος και μία απαίτηση έκδοσης.
Και είναι το πιο φθηνό εργαλείο της κατηγορίας του σε βάρος: το πακέτο δεν τραβά καμία άλλη εξάρτηση μαζί του — είναι ένα πακέτο, όχι δέντρο. Μετρημένα σε καθαρό φάκελο: η εγκατάσταση πήρε 3 δευτερόλεπτα και άφησε 9,7 MB στον δίσκο. Το ίδιο το αρχείο του πακέτου είναι 9,96 MB αναλυμένα, από το πεδίο unpackedSize του μητρώου.
Η απαίτηση: Node 14 ή νεότερο — από το πεδίο engines του πακέτου, όχι από το README. Δεν θέλει κάρτα γραφικών, δεν θέλει λογαριασμό, δεν θέλει κλειδί.
Σε χρήματα: μηδέν. Είναι ελεύθερο λογισμικό με άδεια MIT. Η δαπάνη είναι τα δευτερόλεπτα που γλιτώνεις και οι λογομαχίες που δεν γίνονται — και αυτά τα μετράς μόνο στη δική σου ομάδα.
Ετυμηγορία
Είναι ένα από τα εργαλεία που δεν εντυπωσιάζουν και δεν το βάζεις σε επίδειξη, αλλά τα χρησιμοποιείς κάθε μέρα: 52.408 αστέρια, 182,7 εκατομμύρια λήψεις την εβδομάδα, συντηρημένο, με άδεια MIT, με μηδέν εξαρτήσεις και μόλις 9,7 MB. Το πιο δυνατό του σημείο δεν είναι τεχνικό — είναι κοινωνικό: βγάζει μια ολόκληρη κατηγορία διαφωνίας από τη μέση. Και το πιο σημαντικό που πρέπει να κρατήσεις: μορφοποιεί, δεν διορθώνει. Αυτό που κάνει ο κώδικας μένει δικό σου· αυτό που δείχνει, το αποφασίζει αυτό.
Πηγές:
Εγκατάσταση
4 ΒΗΜΑΤΑ- mkdir ptest && cd ptest
- npm init -y
- npm install --save-dev prettier@3.9.10
- npx prettier --write .