- Τα προγράμματα περιήγησης δεν υποστηρίζουν εγγενώς τη συνάρτηση require του Node, επομένως οι ενότητες npm τύπου CommonJS δεν μπορούν να εκτελεστούν απευθείας σε JavaScript από την πλευρά του πελάτη.
- Το Browserify αναλύει ένα αρχείο καταχώρησης όπως το main.js, ακολουθεί όλες τις απαιτούμενες κλήσεις και ομαδοποιεί κάθε εξάρτηση σε ένα ενιαίο αρχείο JavaScript έτοιμο για χρήση σε πρόγραμμα περιήγησης.
- Η εγκατάσταση μονάδων με εντολές όπως npm install uniq επιτρέπει στο Browserify να ανακτά πακέτα από το node_modules και να τα ενσωματώνει στο δημιουργημένο bundle.js.
- Η συμπερίληψη του bundle.js μέσω μιας τυπικής ετικέτας script σε HTML επιτρέπει την ομαλή εκτέλεση του αρθρωτού κώδικα που βασίζεται σε npm στο πρόγραμμα περιήγησης ως ένα βελτιστοποιημένο στοιχείο.
Όταν ξεκινάτε να εργάζεστε με ενότητες JavaScript, ένα από τα πρώτα προβλήματα που αντιμετωπίζετε είναι το χάσμα μεταξύ του τρόπου με τον οποίο το Node.js φορτώνει κώδικα και του τρόπου με τον οποίο το κάνουν τα προγράμματα περιήγησης. Στο Node απλώς καλείτε require() και όλα συνδυάζονται μαγικά. Αλλά δοκιμάστε το ίδιο πράγμα απευθείας στο πρόγραμμα περιήγησης και θα ανακαλύψετε γρήγορα ότι αυτή η λειτουργία απλά δεν υπάρχει εκεί. Ακριβώς εκεί παρεμβαίνουν εργαλεία, ροές εργασίας και έννοιες γύρω από ένα πρόγραμμα περιήγησης πακέτων npm και bundlers όπως το Browserify για να σώσουν την κατάσταση.
Αυτό το άρθρο σας καθοδηγεί στον τρόπο με τον οποίο το npm ως οικοσύστημα πακέτων συνδυάζεται με την ιδέα της περιήγησης, της ανακάλυψης και τελικά της ομαδοποίησης αυτών των πακέτων, ώστε να εκτελούνται πραγματικά σε ένα πρόγραμμα περιήγησης ιστού. Θα επανεξετάσουμε ένα κλασικό παράδειγμα βασισμένο στο Browserify, και θα εξηγήσουμε γιατί require λειτουργεί στο Node αλλά όχι στο πρόγραμμα περιήγησης και δείχνει βήμα προς βήμα πώς να μεταβείτε από ένα μικροσκοπικό αρχείο σεναρίου σε ένα ενιαίο πακέτο που μπορείτε να τοποθετήσετε σε μια ιστοσελίδα με μια απλή ετικέτα σεναρίου. Στην πορεία, θα δώσουμε επίσης το περιεχόμενο, πρακτικές συμβουλές και μερικές σύγχρονες εναλλακτικές λύσεις, ώστε ολόκληρη η ροή εργασίας να έχει νόημα για έργα του πραγματικού κόσμου.
Κατανόηση του χάσματος μεταξύ του Node.js και του προγράμματος περιήγησης

Το βασικό σημείο εκκίνησης είναι ότι τα προγράμματα περιήγησης ιστού και το Node.js προσφέρουν πολύ διαφορετικά συστήματα λειτουργικών μονάδων αμέσως μόλις τα χρησιμοποιήσετε. Ιστορικά, ο Node έχει χρησιμοποιήσει τη μορφή ενότητας CommonJS, όπου φορτώνετε εξαρτήσεις χρησιμοποιώντας require('package-name') και να εκθέσετε τη λειτουργικότητα με module.exportsΑυτό το μοτίβο είναι βαθιά ενσωματωμένο στο χρόνο εκτέλεσης του Node, αλλά τα παραδοσιακά προγράμματα περιήγησης δεν γνωρίζουν τίποτα γι' αυτό.
Σε ένα απλό περιβάλλον προγράμματος περιήγησης δεν υπάρχει ενσωματωμένη require συνάρτηση, ούτε υπάρχει υποστήριξη για τις ενότητες τύπου CommonJS στις οποίες βασίζονται τα περισσότερα πακέτα npm. Το πρόγραμμα περιήγησης κατανοεί κλασικές ετικέτες script που φορτώνουν αρχεία JavaScript παγκοσμίως και σε πιο σύγχρονα περιβάλλοντα υποστηρίζει ενότητες ES με type="module" χαρακτηριστικό, αλλά εξακολουθεί να μην κατανοεί τη σημασιολογία CommonJS του Node από μόνο του.
Αυτή η διαφορά γίνεται πρόβλημα μόλις προσπαθήσετε να επαναχρησιμοποιήσετε κώδικα τύπου Node ή πακέτα npm απευθείας μέσα σε JavaScript από την πλευρά του πελάτη. Μπορεί να έχετε ένα απλό απόσπασμα όπως π.χ. var unique = require('uniq') αυτό λειτουργεί τέλεια σε ένα σενάριο Node, αλλά αν επικολλήσετε την ίδια γραμμή σε ένα αρχείο που έχει φορτωθεί στο πρόγραμμα περιήγησης, θα λάβετε αμέσως ένα σφάλμα αναφοράς, επειδή require δεν ορίζεται.
Επομένως, οι προγραμματιστές χρειάζονται κάποιο είδος «γέφυρας» που τους επιτρέπει να συνεχίσουν να γράφουν οικείο κώδικα τύπου Node, ενώ παράλληλα να παρέχουν στοιχεία συμβατά με προγράμματα περιήγησης. Αυτή η γέφυρα είναι συνήθως ένα bundler: ένα εργαλείο που περιηγείται στο γράφημα εξάρτησής σας ξεκινώντας από ένα αρχείο καταχώρησης, συγκεντρώνει όλα όσα απαιτούνται και εξάγει ένα ενιαίο bundle JavaScript που το πρόγραμμα περιήγησης μπορεί να εκτελέσει χωρίς να γνωρίζει τίποτα για το Node ή το npm.
Τι κάνει το Browserify στο οικοσύστημα npm
Το Browserify είναι ένα από τα πρώτα και πιο σημαντικά εργαλεία που έλυσαν αυτήν ακριβώς την πρόκληση για τους προγραμματιστές JavaScript. Ο στόχος του είναι απλός: σας επιτρέπει να γράφετε κώδικα με το Node's require μοτίβο, εισάγετε ενότητες από το npm και, στη συνέχεια, συσκευάστε όλα αυτά σε ένα μόνο αρχείο που εκτελείται στο πρόγραμμα περιήγησης σαν να υποστηρίζεται εγγενώς το CommonJS.
Από την οπτική γωνία της περιήγησης πακέτων npm, το Browserify μετατρέπει αποτελεσματικά το γιγαντιαίο οικοσύστημα πακέτων Node σε μια βιβλιοθήκη πιθανών εξαρτήσεων από την πλευρά του πελάτη. Αντί να αντιγράφετε χειροκίνητα τα σενάρια, απλώς εγκαθιστάτε μια ενότητα από το npm, χρησιμοποιώντας require() όπως ακριβώς και στον κώδικα από την πλευρά του διακομιστή, και βασιστείτε στο Browserify για να το μεταφράσει αυτό σε κάτι που μπορούν να κατανοήσουν τα προγράμματα περιήγησης των χρηστών σας.
Εσωτερικά, το Browserify διασχίζει όλες τις ενότητες που αναφέρονται μέσω require, ξεκινώντας από ένα δεδομένο αρχείο καταχώρησης, και κατασκευάζει ένα γράφημα εξάρτησης. Για κάθε ενότητα σε αυτό το γράφημα, ξαναγράφει τον κώδικα σε μια φόρμα που μιμείται το περιβάλλον CommonJS στο πρόγραμμα περιήγησης, συμπεριλαμβανομένου του τοπικού εύρους ζώνης και ενός φιλικού προς το πρόγραμμα περιήγησης. require υλοποίηση. Το τελικό τεχνούργημα είναι ένα ενιαίο αρχείο δέσμης, που συνήθως ονομάζεται bundle.js, που ενσωματώνει όλες αυτές τις ενότητες.
Το τελικό αποτέλεσμα είναι μια ροή εργασίας όπου οι προγραμματιστές front-end μπορούν να βασίζονται σε πακέτα από το npm χωρίς να ανησυχούν για την έλλειψη εγγενούς υποστήριξης από το πρόγραμμα περιήγησης για τις μονάδες Node. Αποκτάτε πρόσβαση σε έναν τεράστιο κατάλογο βιβλιοθηκών για εργασίες όπως χειρισμός δεδομένων, βοηθητικά προγράμματα ή βοηθήματα UI, αλλά εξακολουθείτε να παρέχετε μόνο ένα αρχείο script στον πελάτη, ενσωματώνοντας ομαλά τις παραδοσιακές σελίδες HTML.
Ξαναγράφοντας το κλασικό παράδειγμα εκπαιδευτικού οδηγού Browserify
Για να κάνετε τα πάντα συγκεκριμένα, φανταστείτε ότι έχετε ένα μόνο αρχείο JavaScript με το όνομα main.js στο έργο σας και θέλετε να χρησιμοποιήσετε ένα πακέτο npm που ονομάζεται uniq για να φιλτράρετε διπλότυπες τιμές από έναν πίνακα. Σε ένα περιβάλλον Node, θα ξεκινούσατε το αρχείο με μια γραμμή όπως var unique = require('uniq')Αυτή η γραμμή εισάγει την εξαγόμενη συνάρτηση από το uniq ενότητα και την αποθηκεύει σε μια μεταβλητή που ονομάζεται unique.
Μέσα σε αυτό main.js αρχείο, μπορείτε στη συνέχεια να δημιουργήσετε έναν απλό πίνακα αριθμών που περιέχει επαναλαμβανόμενες καταχωρήσεις. Για παράδειγμα, μπορείτε να ορίσετε var data = , όπου ορισμένοι αριθμοί εμφανίζονται περισσότερες από μία φορές. Ο στόχος είναι να δημιουργηθεί ένας νέος πίνακας που περιλαμβάνει κάθε αριθμό μόνο μία φορά, με ταξινομημένη σειρά.
Χρησιμοποιώντας την εισαγόμενη συνάρτηση, ο υπόλοιπος κώδικας γίνεται πολύ απλός. Μπορείτε να επικαλεστείτε console.log(unique(data)) για να εκτυπώσετε στην κονσόλα τον πίνακα που επιστρέφεται από το uniq πακέτο, το οποίο εξαλείφει τις διπλότυπες τιμές από τη λίστα. Εάν εκτελέσετε αυτό στο Node, θα δείτε έναν πίνακα εξόδου στον οποίο κάθε αριθμός εμφανίζεται μόνο μία φορά.
Όλη αυτή η λογική υποθέτει ότι το uniq η ενότητα είναι διαθέσιμη στο περιβάλλον σας και ότι η require Η συνάρτηση είναι ορισμένη και ικανή να την επιλύσει. Στο Node, αυτό γίνεται από το runtime και το Αλγόριθμος ανάλυσης μονάδας κόμβου, το οποίο αναζητά έναν κατάλογο με το όνομα node_modules και στη συνέχεια για έναν φάκελο με το όνομα uniq μέσα σε αυτό.
Εγκατάσταση του πακέτου uniq από το npm
Πριν ο κωδικός σας μπορέσει να καλέσει require('uniq'), πρέπει να εγκαταστήσετε το πακέτο από το μητρώο npm. Αυτό γίνεται από τη γραμμή εντολών χρησιμοποιώντας τον npm client που συνοδεύει το Node.js. Στον φάκελο του έργου σας, μπορείτε να εκτελέσετε μια εντολή όπως npm install uniq έτσι ώστε το npm να κατεβάσει την ενότητα και να την αποθηκεύσει στο node_modules Κατάλογο.
The npm install uniq Η εντολή ανακτά την δημοσιευμένη έκδοση του uniq πακέτο και το προσθέτει στις τοπικές εξαρτήσεις του έργου σας. Ανάλογα με τη διαμόρφωση npm και αν χρησιμοποιείτε ένα package.json αρχείο, μπορεί επίσης να καταγράψει το πακέτο στη λίστα εξαρτήσεών σας, διασφαλίζοντας συνεπείς εγκαταστάσεις σε όλα τα περιβάλλοντα για άλλους προγραμματιστές στην ομάδα σας.
Μόλις εγκατασταθεί το πακέτο, η δομή καταλόγου του έργου σας περιλαμβάνει ένα νέο node_modules/uniq φάκελο που περιέχει τον κώδικα αυτού του πακέτου. Αυτό ακριβώς επιτρέπει στον Node's require σύστημα για να εντοπίσει τη μονάδα όταν επιλυθεί 'uniq'Ο ίδιος φάκελος θα εξετάσει το Browserify όταν ξεκινήσει να δημιουργεί το γράφημα εξάρτησης για το πακέτο σας.
Σε αυτό το σημείο, το δικό σας main.js Το αρχείο είναι απόλυτα έγκυρος κώδικας Node που μπορεί να εκτελεστεί στον διακομιστή ή από ένα τερματικό χρησιμοποιώντας τον τυπικό διερμηνέα Node. Ωστόσο, αν απλώς το παρατήσετε αυτό main.js αρχείο σε μια ιστοσελίδα χρησιμοποιώντας μια ετικέτα script, το πρόγραμμα περιήγησής σας δεν θα κατανοήσει ακόμα αυτήν την εισαγωγή σε στυλ CommonJS, επομένως χρειάζεστε ένα επιπλέον βήμα για να το κάνετε έτοιμο για το πρόγραμμα περιήγησης.
Ομαδοποίηση του main.js και των εξαρτήσεών του στο bundle.js
Το κρίσιμο βήμα που επιτρέπει την εκτέλεση αυτού του κώδικα τύπου Node στο πρόγραμμα περιήγησης είναι να επιτρέψετε στο Browserify να επεξεργαστεί main.js και όλες τις απαιτούμενες ενότητες, και στη συνέχεια εκπέμπει ένα μόνο αρχείο JavaScript που συνήθως ονομάζεται bundle.js. Μπορείτε να το κάνετε αυτό από τη γραμμή εντολών μόλις το Browserify εγκατασταθεί καθολικά ή τοπικά στο έργο σας.
Μια τυπική εντολή για την ενεργοποίηση αυτής της διαδικασίας μπορεί να μοιάζει με browserify main.js -o bundle.js. Εδώ, browserify είναι το εκτελέσιμο αρχείο που εκκινεί τη διαδικασία ομαδοποίησης, main.js είναι το αρχείο καταχώρησης που το Browserify αντιμετωπίζει ως ρίζα του γραφήματος εξάρτησης και -o bundle.js δίνει εντολή στο εργαλείο να γράψει την προκύπτουσα δέσμη σε ένα αρχείο με όνομα bundle.js στον τρέχοντα κατάλογο.
Παρασκήνια, το Browserify αναλύει main.js, ακολουθεί κάθε require Η κλήση it finds (εύρεση) και εξερευνά αναδρομικά κάθε εισαγόμενη ενότητα. Αυτό περιλαμβάνει τα δικά σας τοπικά αρχεία, εάν τα χρειάζεστε με σχετικές διαδρομές, καθώς και ενότητες τρίτων που βρίσκονται κάτω από node_modules, Όπως uniq το πακέτο που μόλις εγκαταστήσατε από το npm.
Κάθε εξάρτηση που συναντά το Browserify μετασχηματίζεται, ώστε να μπορεί να εκτελείται μέσα στο πρόγραμμα περιήγησης χωρίς να χρειάζεται το εγγενές περιβάλλον Node. Περιβάλλει κάθε ενότητα στο δικό της πεδίο εφαρμογής, προσομοιώνει τη διεπαφή CommonJS και ομαδοποιεί όλες αυτές τις μετασχηματισμένες ενότητες σε ένα μόνο σενάριο. Το αποτέλεσμα bundle.js Το αρχείο περιέχει κώδικα που μιμείται το require λειτουργία και επιτρέπει την αρχική σας var unique = require('uniq') γραμμή για να συμπεριφέρεται σωστά όταν εκτελείται στην πλευρά του πελάτη.
Μόλις ολοκληρωθεί το Browserify, σας απομένει μόνο ένα αρχείο JavaScript που καταγράφει την αρχική λογική της εφαρμογής σας συν ολόκληρο το μεταβατικό δέντρο εξάρτησης που απαιτείται για να λειτουργήσει. Αυτό το αρχείο είναι πλέον έτοιμο για αναφορά σε μια σελίδα HTML όπως ακριβώς οποιοδήποτε άλλο σενάριο, χωρίς καμία πρόσθετη ρύθμιση παραμέτρων από την πλευρά του προγράμματος περιήγησης.
Φόρτωση του πακέτου Browserify σε μια σελίδα HTML
Με bundle.js δημιουργείται, η ενσωμάτωση όλων των στοιχείων σε έναν κανονικό ιστότοπο είναι τόσο απλή όσο η προσθήκη μιας μόνο ετικέτας script στην HTML σας. Αντί να προσπαθήσετε να φορτώσετε main.js απευθείας, αναφέρεστε στο μεταγλωττισμένο πακέτο που δημιούργησε το Browserify, το οποίο ήδη περιλαμβάνει uniq και οποιεσδήποτε άλλες ενότητες npm που μπορεί να χρειάζεστε.
Ένα βασικό απόσπασμα HTML μπορεί να περιέχει κάτι σαν <script src="bundle.js"></script> κάπου πριν το κλείσιμο </body> tags. Αυτή η ετικέτα script λέει στο πρόγραμμα περιήγησης να κατεβάσει και να εκτελέσει το bundle.js αρχείο. Επειδή το πακέτο μιμείται το περιβάλλον CommonJS που υπάρχει μέσα του, οι κλήσεις σας προς require λειτουργούν εσωτερικά, παρόλο που το παγκόσμιο περιβάλλον του προγράμματος περιήγησης δεν έχει ακόμη ιδέα για το ποια είναι αυτή η λειτουργία.
Από την άποψη της σελίδας, δεν υπάρχει ορατή διαφορά μεταξύ αυτής της δέσμης και οποιουδήποτε άλλου μεμονωμένου αρχείου JavaScript που θα μπορούσατε να συμπεριλάβετε. Η πολυπλοκότητα των ενοτήτων, οι εσωτερικές εξαρτήσεις και η προσομοιωμένη require όλη η λογική είναι ενθυλακωμένη μέσα bundle.jsΤο πρόγραμμα περιήγησης χρειάζεται να φορτώσει μόνο έναν πόρο και να τον εκτελέσει, κάτι που έχει επίσης πλεονεκτήματα απόδοσης σε σύγκριση με τη φόρτωση πολλών ξεχωριστών μικρών αρχείων.
Εξαιτίας αυτού, η ροή εργασίας ταιριάζει άψογα ακόμη και σε παλαιότερες στοίβες front-end όπου μπορεί να εργάζεστε με στατικά αρχεία HTML ή πρότυπα που αποδίδονται από διακομιστή. Δεν χρειάζεται να αλλάξετε ριζικά τον τρόπο με τον οποίο δομείτε τις σελίδες σας. Απλώς αλλάζετε τον τρόπο με τον οποίο προετοιμάζετε την JavaScript που παρέχετε, αντικαθιστώντας πολλαπλούς διάσπαρτους πόρους και λειτουργικές μονάδες μόνο για κόμβους με ένα βελτιστοποιημένο πακέτο που παράγεται από το Browserify.
Γιατί η ομαδοποίηση με το Browserify έχει σημασία για την περιήγηση σε πακέτα npm
Όταν οι άνθρωποι μιλούν για ένα "πρόγραμμα περιήγησης πακέτων npm" ή για περιήγηση σε πακέτα npm για χρήση στο front-end, το υποκείμενο ερώτημα είναι συνήθως: πώς μπορώ πραγματικά να χρησιμοποιήσω αυτήν την ενότητα σε ένα έργο που βασίζεται σε πρόγραμμα περιήγησης; Η ύπαρξη εργαλείων όπως το Browserify μετατρέπει έναν θεωρητικό κατάλογο βιβλιοθηκών από την πλευρά του διακομιστή σε μια πρακτική εργαλειοθήκη που μπορείτε να εφαρμόσετε απευθείας στις εφαρμογές ιστού σας.
Στην πράξη, αυτό σημαίνει ότι η εξερεύνηση του npm για χρήσιμα modules δεν περιορίζεται πλέον σε εργασίες Node ή back-end. Αν βρείτε μια μικρή βιβλιοθήκη βοηθητικών προγραμμάτων που λειτουργεί αποκλειστικά με δομές δεδομένων JavaScript και δεν βασίζεται σε API ειδικά για Node, υπάρχει μεγάλη πιθανότητα να την καταναλώσετε στο πρόγραμμα περιήγησης συνδυάζοντάς την με το Browserify ή ένα παρόμοιο εργαλείο. Αυτό διευρύνει σημαντικά τις επιλογές σας κατά την επίλυση προβλημάτων όπως η κατάργηση διπλότυπων πινάκων, ο μετασχηματισμός δεδομένων ή η εφαρμογή μικρών αλγορίθμων.
Επιπλέον, η ομαδοποίηση μειώνει τον αριθμό των αιτημάτων δικτύου που πρέπει να εκτελέσει η ιστοσελίδα σας κατά τη φόρτωση. Αντί να συμπεριλαμβάνονται ξεχωριστές ετικέτες σεναρίου για κάθε τοπικό αρχείο ή απομακρυσμένη βιβλιοθήκη, όλα ενοποιούνται σε ένα ενιαίο αρχείο. bundle.js Αυτό λειτουργεί καλά με την προσωρινή αποθήκευση HTTP και μπορεί να απλοποιήσει τους αγωγούς ανάπτυξης, ειδικά όταν έχετε να κάνετε με πολύπλοκες εφαρμογές που βασίζονται σε πολλές ενότητες npm.
Από την άποψη της συντήρησης, η δυνατότητα να βασίζεστε συνεχώς σε require και στη διαχείριση εξαρτήσεων του npm, η βάση κώδικα του front-end σας φαίνεται πιο προβλέψιμη και αρθρωτή. Εγκαθιστάτε, ενημερώνετε και καταργείτε λειτουργικές μονάδες χρησιμοποιώντας εντολές npm, ελέγχετε κεντρικά τις εξαρτήσεις και αφήνετε το Browserify να χειριστεί τον μετασχηματισμό που απαιτείται για τη συμβατότητα του προγράμματος περιήγησης, αντί να αντιγράφετε μη αυτόματα αρχεία ή να ενσωματώνετε κώδικα τρίτων με ad-hoc τρόπους.
Σχέση με τα σύγχρονα εργαλεία JavaScript
Ενώ το κλασικό παράδειγμα που έχουμε αναλύσει εστιάζει ειδικά στο Browserify, το θεμελιώδες μοτίβο που απεικονίζει εξακολουθεί να αποτελεί τη βάση πολλών σύγχρονων εργαλείων δημιουργίας front-end. Νεότερα bundlers όπως τα Webpack, Rollup, Parcel ή Vite αντιμετωπίζουν επίσης το πρόβλημα της μετατροπής ενοτήτων που είναι γραμμένες σε ένα στυλ σε bundles που τα προγράμματα περιήγησης μπορούν να εκτελέσουν αποτελεσματικά.
Τα σύγχρονα προγράμματα περιήγησης υποστηρίζουν πλέον εγγενώς τις ενότητες ES μέσω <script type="module">, το οποίο αλλάζει μέρος της εικόνας αλλά δεν εξαλείφει την ανάγκη για βήματα κατασκευής με επίγνωση του npm. Πολλά πακέτα στο οικοσύστημα npm εξακολουθούν να εκθέτουν σημεία εισόδου CommonJS ή βασίζονται σε ανάλυση τύπου Node, και ακόμη και όταν είναι διαθέσιμες κατασκευές μονάδων ES, η ομαδοποίηση παραμένει πολύτιμη για βελτιστοποίηση, tree-shaking και συνεπή συμπεριφορά φόρτωσης.
Σε αυτό το ευρύτερο πλαίσιο, το μικρό παράδειγμα που χρησιμοποιεί require('uniq'), npm install uniq και σε έναν browserify main.js -o bundle.js Η εντολή είναι κάτι περισσότερο από ένα απλό σεμινάριο. Καταδεικνύει τον βασικό αγωγό της «γραφής αρθρωτού κώδικα, εγκατάστασης εξαρτήσεων από npm και, στη συνέχεια, παραγωγής ενός φιλικού προς το πρόγραμμα περιήγησης πακέτου», ένα μοτίβο που μοιράζεται σχεδόν κάθε σοβαρή εγκατάσταση front-end σήμερα, ακόμη και αν τα συγκεκριμένα εργαλεία διαφέρουν.
Η κατανόηση του τρόπου λειτουργίας του Browserify διευκολύνει επίσης τη συλλογιστική σχετικά με τις νεότερες στοίβες. Αντί να αντιμετωπίζουμε τα σύγχρονα προγράμματα δημιουργίας πακέτων ως μαύρα κουτιά, μπορείτε να δείτε την ομοιότητα: όλα διαβάζουν αρχεία εισόδου, ακολουθούν εισαγωγές ή απαιτήσεις, συλλέγουν εξαρτήσεις, μετασχηματίζουν τον κώδικα και εξάγουν πακέτα που φορτώνει το πρόγραμμα περιήγησης μέσω απλών ετικετών σεναρίων. Το οικοσύστημα πακέτων npm, το σύστημα λειτουργικών μονάδων και το πρόγραμμα δημιουργίας πακέτων δημιουργούν μαζί την εμπειρία που είναι απρόσκοπτη στην καθημερινή ανάπτυξη.
Συνδυάζοντας τα όλα σε μια πρακτική ροή εργασίας
Για να ανακεφαλαιώσουμε την πρακτική ροή εργασίας που υπονοείται από το αρχικό παράδειγμα, ξεκινάτε γράφοντας τον κώδικα της εφαρμογής σας σε ένα αρχείο όπως main.js require για να εισαγάγετε τυχόν ενότητες npm που θέλετε να χρησιμοποιήσετε. Σε αυτό το αρχείο μπορείτε να καλέσετε var unique = require('uniq'), ορίστε πίνακες όπως και καταγράφει τα αποτελέσματα στην κονσόλα. Εννοιολογικά, εργάζεστε σαν όλα αυτά να πρόκειται να εκτελεστούν στο Node.
Το επόμενο βήμα είναι να διασφαλίσετε ότι αυτές οι ενότητες υπάρχουν πραγματικά στο έργο σας, εγκαθιστώντας τες με npm, για παράδειγμα μέσω npm install uniq. Αυτή η ενέργεια συμπληρώνει το node_modules κατάλογο, δίνοντας τόσο στον Node όσο και στο Browserify πρόσβαση στον κώδικα της ενότητας, ώστε να μπορεί να επιλυθεί και να συμπεριληφθεί όπου χρειάζεται.
Αφού ο κώδικας και οι εξαρτήσεις σας είναι στη θέση τους, δίνετε εντολή στο Browserify να συγκεντρώσει αναδρομικά τα πάντα ξεκινώντας από το αρχείο καταχώρισής σας εκτελώντας μια εντολή όπως browserify main.js -o bundle.js. Αυτή η διαδικασία περνάει μέσα από το δέντρο εξαρτήσεων, τυλίγει κάθε ενότητα για να μιμηθεί ένα περιβάλλον CommonJS στο πρόγραμμα περιήγησης και τέλος γράφει. bundle.js ως το ενιαίο ομαδοποιημένο αρχείο που περιέχει όλο τον απαραίτητο κώδικα.
Τέλος, μεταβαίνετε στην HTML σας και αναφέρεστε μόνο σε αυτό το μοναδικό αρχείο εξόδου με μια συμβατική ετικέτα script όπως <script src="bundle.js"></script>. Δεν απαιτείται ειδική σύνταξη στη σελίδα. Η πολυπλοκότητα βρίσκεται εξ ολοκλήρου μέσα στο πακέτο. Το πρόγραμμα περιήγησης κάνει λήψη και εκτελεί bundle.js, και ο κώδικας μέσα σε αυτόν εκτελείται σαν να require μηχανήματα ενσωματώθηκαν στο ίδιο το πρόγραμμα περιήγησης.
Ακολουθώντας αυτό το μοτίβο, γεφυρώνετε αποτελεσματικά το χάσμα μεταξύ του συστήματος μονάδων του Node και του περιβάλλοντος του προγράμματος περιήγησης, ενώ παράλληλα συνεχίζετε να επωφελείστε από το τεράστιο οικοσύστημα πακέτων npm. Περιηγείστε στα πακέτα, τα εγκαθιστάτε, τα χρειάζεστε και στη συνέχεια στέλνετε ένα βελτιστοποιημένο αρχείο στους χρήστες σας, διατηρώντας τόσο την εμπειρία ανάπτυξης όσο και το περιβάλλον εκτέλεσης διαχειρίσιμα και αποτελεσματικά.
Από μια προοπτική υψηλότερου επιπέδου, ο συνδυασμός npm, ενοτήτων τύπου Node και ενός bundler όπως το Browserify μετατρέπει μια διάσπαρτη συλλογή αρχείων JavaScript σε μια συνεκτική, έτοιμη για πρόγραμμα περιήγησης σωλήνωση πόρων. Οι προγραμματιστές μπορούν να γράφουν αρθρωτό κώδικα, να βασίζονται σε πακέτα που συντηρούνται από την κοινότητα και να παρέχουν ένα μόνο σενάριο στις ιστοσελίδες τους, καθιστώντας την σύγχρονη ανάπτυξη JavaScript τόσο επεκτάσιμη όσο και προσβάσιμη σε όλα τα εργαλεία και τα περιβάλλοντα.