Node.js module.exports έναντι εξαγωγών

Τι είναι, πώς να τα χρησιμοποιήσετε και πώς να μην τα χρησιμοποιήσετε

(Σημειώστε ότι αυτό το άρθρο γράφτηκε μετά την κυκλοφορία του Node.js 6.1.0)

TL; Δρ

  • Σκεφτείτε το module.exports ως τη μεταβλητή από την οποία απαιτείται επιστροφή (). Είναι ένα κενό αντικείμενο από προεπιλογή, και είναι καλό να αλλάζουμε σε οτιδήποτε.
  • Εξαγωγές; Λοιπόν, οι «εξαγωγές» δεν επιστρέφονται ποτέ!Είναι απλώς μια αναφορά στο module.exports. μια μεταβλητή ευκολίας που βοηθά τους συγγραφείς της μονάδας να γράφουν λιγότερο κώδικα Η εργασία με τις ιδιότητές της είναι ασφαλής και συνιστάται.
exports.method = function() {…} 
vs.
module.exports.method = function() {…}

Ένα απλό παράδειγμα ενότητας

Πρώτον, χρειαζόμαστε ένα παράδειγμα βάσης κώδικα. Ας ξεκινήσουμε με μια απλή αριθμομηχανή:

Χρήση:

Το περιτύλιγμα της μονάδας

Το Node.js αναδιπλώνει εσωτερικά όλες τις απαιτούμενες () - επεξεργασμένες μονάδες σε ένα περιτύλιγμα συνάρτησης:

Το αντικείμενο της ενότητας

Η μεταβλητή " module " είναι ένα αντικείμενο που αντιπροσωπεύει την τρέχουσα ενότητα. Δεν είναι τοπική σε κάθε μονάδα και είναι επίσης ιδιωτική (προσβάσιμα μόνο από τη μονάδα κώδικα):

Module.exports

  • Είναι η αναφορά αντικειμένου που επιστρέφεται από τις απαιτούμενες () κλήσεις.
  • Δημιουργείται αυτόματα από το Node.js.
  • Είναι απλώς μια αναφορά σε ένα απλό αντικείμενο JavaScript.
  • Είναι επίσης κενό από προεπιλογή (ο κώδικας μας επισυνάπτει μια μέθοδο "add ()")

Υπάρχουν δύο τρόποι με τους οποίους μπορούμε να χρησιμοποιήσουμε το module.exports:

  1. Προσάρτηση δημόσιων μεθόδων σε αυτό (όπως κάναμε στο παράδειγμα της αριθμομηχανής).
  2. Η αντικατάσταση αυτή με το έθιμο μας αντικείμενο ή λειτουργία.

Γιατί να το αντικαταστήσετε; Κατά την αντικατάσταση, μπορούμε να επιστρέψουμε οποιαδήποτε αυθαίρετη παρουσία κάποιας άλλης κατηγορίας. Εδώ είναι ένα παράδειγμα που γράφτηκε στο ES2015:

Πάνω, το "calculator-base" εξάγει μια κλάση.

Ας επεκτείνουμε την κλάση "Αριθμομηχανή" και εξάγουμε μια παρουσία αυτή τη φορά:

Χρήση:

Εξάγει ψευδώνυμο

  • Η «εξαγωγή» είναι απλώς μια μεταβλητή ευκολίας, έτσι ώστε οι συντάκτες των λειτουργικών μονάδων να γράφουν λιγότερο κώδικα
  • Η εργασία με τις ιδιότητές της είναι ασφαλής και συνιστάται.

    (π.χ.: export.add = function…)

  • Οι εξαγωγές ΔΕΝ επιστρέφονται από την απαίτηση () (το module.exports is!)

Εδώ είναι μερικά καλά και μερικά κακά παραδείγματα:

Σημείωση: Είναι κοινή πρακτική να αντικαθιστάτε το module.exports με προσαρμοσμένες συναρτήσεις ή αντικείμενα. Αν το κάνουμε αυτό, αλλά θα θέλαμε να συνεχίσουμε να χρησιμοποιούμε το "εξαγωγές" στενό τότε οι "εξαγωγές" πρέπει να επιστραφούν ξανά στο νέο προσαρμοσμένο αντικείμενο (επίσης γίνεται στον παραπάνω κώδικα στη γραμμή 12):

exports = module.exports = {}
exports.method = function() {...}

συμπέρασμα

Μια μεταβλητή που ονομάζεται εξαγωγές που δεν εξάγεται εξ ολοκλήρου είναι σύγχυση, ειδικά για τους νεοεισερχόμενους στο Node.js. Ακόμη και η επίσημη τεκμηρίωση έχει μια κάπως περίεργη λήψη:

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

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

Ευχαριστώ που διαβάσατε την ανάρτησή μου. Τα σχόλια και οι σκέψεις είναι πάντα ευπρόσδεκτες στην ενότητα σχολίων.

Λάζλοτζουλι

Σχετικά Άρθρα:

  • Είναι οι μονάδες Node.js μονάδες;

Πηγές:

  • Node.js Τεκμηρίωση σε Ενότητες

Δείτε τη νέα σειρά ιστολογίων μου σχετικά με τη δοκιμή μονάδας:

Πώς να ξεκινήσετε με τη δοκιμή μονάδας; Μέρος 1

Υποθέτω ότι πολλοί από εμάς μπορούν να σχετίζονται με μια κατάσταση που απεικονίζεται παραπάνω.

Ένα μέρος όπου, η δοκιμή μονάδας θεωρείται μικροδουλειά. medium.com