- - - - - CommonJS vs AMD vs RequireJS vs ES6 Modules - - - - -

Πριν μπορώ να πάω στο τμήμα των αρθρωτών, παρακαλώ ελέγξτε τη μοναδική σύγκρισή μου, Συλλογή σκουπιδιών έναντι αυτόματης καταμέτρησης αναφοράς.

Οι ενότητες JavaScript αφορούν μικρές μονάδες ανεξάρτητου, επαναχρησιμοποιήσιμου κώδικα. Έχουν ξεχωριστή λειτουργικότητα, επιτρέποντάς τους να προστεθούν, να αφαιρεθούν χωρίς να διαταραχθεί το σύστημα. Φαίνεται να μιμείται πώς χρησιμοποιούνται οι κλάσεις σε Java ή Python.

Οι ενότητες είναι αυτοτελείς. Η ενημέρωση μιας ενότητας είναι πολύ πιο εύκολη αν αποσυνδεθεί από άλλα κομμάτια κώδικα. Αυτό ενθαρρύνει τον προγραμματιστή να περάσει από το πρόγραμμα πολύ λιγότερο εκφοβιστικό. Επιλύει επίσης την ασάφεια του χώρου ονομάτων, επιτρέποντας την δημιουργία αντικειμένων σε κοινόχρηστους χώρους ονομάτων ενώ οι λειτουργίες σε αυτό παραμένουν ιδιωτικές. Οι ενότητες μπορούν να επαναχρησιμοποιηθούν, εξαλείφοντας τα διπλά κομμάτια κώδικα εξοικονομώντας έτσι τεράστιο χρόνο.
Πριν φτάσουν τα δομοστοιχεία, χρησιμοποιήθηκε το μοτίβο της Μονάδας αποκάλυψης.

var αποκαλυπτικήModule = (συνάρτηση () {
    var privateVar = "Ben Thomas".
    συνάρτηση setNameFn (strName) {
        privateVar = strName;
    }}
ΕΠΙΣΤΡΟΦΗ {
        setName: setNameFn,
    },
}) ();
αποκαλύπτονταςModule.setName ("Paul Adams")?

Σε αυτό το πρόγραμμα, οι δημόσιες λειτουργίες εκτίθενται ενώ οι ιδιωτικές ιδιότητες και οι μέθοδοι είναι εγκλωβισμένες.

Πολλαπλές ενότητες μπορούν να οριστούν σε ένα μόνο αρχείο, αλλά οι downslides είναι ότι η ασύγχρονη φόρτωση των ενοτήτων δεν είναι δυνατή, δεν είναι δυνατή η εισαγωγή των μονάδων προγραμματικά.

CommonJS

Έφεραν μια ξεχωριστή προσέγγιση για να αλληλεπιδράσουν με το σύστημα της μονάδας χρησιμοποιώντας τις λέξεις-κλειδιά που απαιτούν και τις εξαγωγές. απαιτείται είναι μια συνάρτηση που χρησιμοποιείται για την εισαγωγή λειτουργιών από άλλη μονάδα. οι εξαγωγές είναι ένα αντικείμενο στο οποίο οποιαδήποτε λειτουργία που έχει τεθεί σε αυτήν θα εξαχθεί.

// ------ payments.js ------
var customerStore = απαιτούν ('κατάστημα / πελάτης'); // module εισαγωγής
// ------ store / customer.js ------
εξαγωγές = συνάρτηση () {
    επιστρέψτε customers.get ('store);
}}

Στο παραπάνω παράδειγμα, το shopStore εισάγεται στα payments.js. Η λειτουργία που έχει οριστεί στο αντικείμενο των εξαγωγών στη μονάδα πελάτη φορτώνεται στο αρχείο πληρωμών.

Αυτές οι ενότητες είναι σχεδιαστές για την ανάπτυξη διακομιστών και αυτές είναι synchronous.ie., Τα αρχεία φορτώνονται μία προς μία στη σειρά μέσα στο αρχείο.

Εφαρμογή NodeJS

Αυτά επηρεάζονται σε μεγάλο βαθμό από την προδιαγραφή CommonJS. Η μεγάλη διαφορά προκύπτει στο αντικείμενο των εξαγωγών. Οι ενότητες NodeJS χρησιμοποιούν module.exports ως αντικείμενο για εξαγωγή ενώ το CommonJS χρησιμοποιεί μόνο τη μεταβλητή εξαγωγής.

//payments.js
var customerStore = απαιτούν ('κατάστημα / πελάτης'); // module εισαγωγής
//store/customer.js
συνάρτηση customerStore () {
    επιστρέψτε customers.get ('store);
}}
modules.exports = customerStore;

Είναι επίσης συγχρόνου χαρακτήρα. Η παράμετρος πέρασε στους απαιτούμενους ελέγχους για το όνομα της μονάδας μέσα στον κατάλογο node_modules. Υποστηρίζονται οι κυκλικές εξαρτήσεις και ο προγραμματιστής μπορεί εύκολα να κατανοήσει τις έννοιες. Τα μειονεκτήματα είναι μόνο ένα αρχείο ανά ενότητα, μόνο τα αντικείμενα γίνονται ως ενότητες και τα προγράμματα περιήγησης δεν μπορούν να χρησιμοποιήσουν αυτές τις μονάδες απευθείας χωρίς να μετακινηθούν.

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

Ορισμός ασύγχρονου στοιχείου (AMD)

Η AMD γεννήθηκε ως CommonJS δεν ήταν κατάλληλη για τους browsers νωρίς. Όπως υποδηλώνει το όνομα, υποστηρίζει την ασύγχρονη φόρτιση της μονάδας.

ορίζει (['module1', ', module2'], λειτουργία (module1, module2) {
  console.log (module1.setName ());
});

Η λειτουργία καλείται μόνο όταν ολοκληρωθεί η φόρτωση των απαιτούμενων ενοτήτων. Η συνάρτηση ορισμού παίρνει το πρώτο όρισμα ως μια σειρά εξαρτημάτων εξάρτησης. Οι ενότητες αυτές φορτώνονται με τρόπο μη μπλοκαρίσματος στο παρασκήνιο και μόλις ολοκληρωθεί η φόρτωση, εκτελείται η λειτουργία επανάκλησης.

Έχει σχεδιαστεί για χρήση σε προγράμματα περιήγησης για καλύτερους χρόνους εκκίνησης και αυτές οι ενότητες μπορούν να είναι αντικείμενα, λειτουργίες, κατασκευαστές, χορδές, JSON κλπ. Οι ενότητες μπορούν να χωριστούν σε πολλαπλά αρχεία, τα οποία είναι συμβατά για τις ανάγκες και οι εξαγωγές και οι κυκλικές εξαρτήσεις υποστηρίζονται Καλά.

Το RequireJS εφαρμόζει το API API. Φορτώνει τα απλά αρχεία JavaScript καθώς και τις ενότητες χρησιμοποιώντας απλές ετικέτες δέσμης ενεργειών. Περιλαμβάνει ένα εργαλείο βελτιστοποίησης που μπορεί να εκτελεστεί κατά την ανάπτυξη του κώδικα μας για καλύτερη απόδοση.