A Node.js module.export vs. export

Mik ezek, hogyan kell használni és hogyan nem kell használni

(Vegye figyelembe, hogy ez a cikk a Node.js 6.1.0 kiadás után készült.)

TL; DR

  • Gondoljunk a module.exports-ra, mint arra a változóra, amelyből a required () származik. Alapértelmezés szerint ez egy üres objektum, és bármire át lehet változtatni.
  • Export? Nos, magát az „exportot” soha nem adják vissza!Ez csak a module.exports hivatkozás; egy kényelmi változó, amely segít a modul szerzőinek kevesebb kódot írni. A tulajdonságokkal való munkavégzés biztonságos és ajánlott.
exports.method = function() {…} 
vs.
module.exports.method = function() {…}

Egy egyszerű modul példa

Először is szükségünk van egy példára. Kezdjük egy egyszerű számológéppel:

Használat:

A modul burkolója

A Node.js belsőleg bepakolja az összes szükséges () - ed modult egy függvény burkolóba:

A modul objektum

A „ module ” változó az aktuális modult reprezentáló objektum. Ez a helyi, hogy minden modul , és ez is magán (csak elérhető modul kód):

Modul.export

  • Ez az objektum hivatkozás kap visszaküldést a szükséges () hívásokból.
  • A Node.js automatikusan létrehozza.
  • Ez csak hivatkozás egy sima JavaScript objektumra.
  • Alapértelmezés szerint üres is (kódunk egy „add ()” metódust csatol hozzá)

Két módon használhatjuk a module.exports-t:

  1. Nyilvános módszerek csatolása hozzá (mint ahogy a számológép példában tettük).
  2. Cserélje ki az egyedi objektumra vagy függvényre.

Miért cseréljük le? Csere esetén bármely más osztály tetszőleges példányát visszaadhatjuk. Itt van egy példa, amelyet az ES2015 írt:

Fent a „számológép-alap” exportál egy osztályt.

Bővítsük ki a „Számológép” osztályt, és exportáljunk egy példányt ezúttal:

Használat:

Export álnevet

  • Az „export” csak egy kényelmi változó, így a modul készítői kevesebb kódot írhatnak
  • A tulajdonságokkal való munkavégzés biztonságos és ajánlott.

    (pl .: export.add = függvény ...)

  • Az exportot NEM adja vissza a required () (a module.exports az!)

Íme néhány jó és néhány rossz példa:

Megjegyzés: Általános gyakorlat, hogy a module.exports-t egyedi függvényekkel vagy objektumokkal helyettesíti. Ha ezt megtesszük, de továbbra is szeretnénk használni az „export” gyorsírást; akkor az „export” -ot új egyedi objektumunkra kell irányítani (szintén a fenti kóddal a 12. sorban):

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

Következtetés

Az export nevű változó , amelyet nem exportálnak teljes egészében, zavaró, különösen a Node.js újoncai számára. Még a hivatalos dokumentáció is kissé furcsa:

Irányelvként, ha az export és a module.exports kapcsolata varázslatnak tűnik számodra, akkor hagyd figyelmen kívül az exportot, és csak a module.exports fájlt használd.

Véleményem szerint a kód nem varázslat. A fejlesztőknek mindig törekedniük kell az általuk használt platformok és nyelvek mélyebb megértésére. Ezzel; A programozók értékes bizalmat és tudást szereznek, ami pozitívan befolyásolja a kód minőségét, a rendszer architektúráját és a termelékenységet.

Köszönöm, hogy elolvastad a hozzászólásomat. A visszajelzéseket és a gondolatokat mindig várjuk a megjegyzések részben.

lazlojuly

Kapcsolódó cikkek:

  • A Node.js modulok egyedülállóak?

Források:

  • Node.js Dokumentáció a modulokról

Nézze meg új blog sorozatomat az egységek teszteléséről:

Hogyan kezdje el az egység tesztelését? 1. rész

Gondolom, sokan kapcsolódhatunk a fent leírt helyzethez.

Olyan hely, ahol az egység tesztelése házimunkának számít. medium.com