w pliku node.js plik module.js służy do uruchomienia modułu.load system. za każdym razem, gdy węzeł wykonuje plik, zawija zawartość pliku js w następujący sposób
'(function (exports, require, module, __filename, __dirname) {',+
//your js file content
'\n});'
ze względu na to zawijanie w kodzie źródłowym ur js można uzyskać dostęp do eksportu, wymagania, modułu itp. Podejście to jest stosowane, ponieważ nie ma innego sposobu na przeniesienie funkcjonalności pliku js do innego.
następnie węzeł wykonuje tę zawiniętą funkcję za pomocą c ++. w tym momencie obiekt eksportu, który przeszedł do tej funkcji, zostanie wypełniony.
możesz zobaczyć wewnątrz tej funkcji eksportu parametrów i modułu. w rzeczywistości eksport jest publicznym członkiem funkcji konstruktora modułów.
spójrz na następujący kod
skopiuj ten kod do b.js
console.log("module is "+Object.prototype.toString.call(module));
console.log("object.keys "+Object.keys(module));
console.log(module.exports);
console.log(exports === module.exports);
console.log("exports is "+Object.prototype.toString.call(exports));
console.log('----------------------------------------------');
var foo = require('a.js');
console.log("object.keys of foo: "+Object.keys(foo));
console.log('name is '+ foo);
foo();
skopiuj ten kod do a.js
exports.name = 'hello';
module.exports.name = 'hi';
module.exports.age = 23;
module.exports = function(){console.log('function to module exports')};
//exports = function(){console.log('function to export');}
teraz uruchom za pomocą węzła
to jest wynik
module is [object Object]
object.keys id,exports,parent,filename,loaded,children,paths
{}
true
eksport jest [obiekt Obiekt]
object.keys of foo: name is function () {console.log ('funkcja do eksportu modułów')} funkcja do eksportu modułów
teraz usuń komentowany wiersz w a.js i skomentuj wiersz powyżej tego wiersza, usuń ostatni wiersz b.js i uruchom.
w świecie javascript nie można ponownie przypisać obiektu przekazanego jako parametr, ale można zmienić członka publicznego funkcji, gdy obiekt tej funkcji ustawiony jako parametr na inną funkcję
pamiętam
używaj module.exports i tylko jeśli chcesz uzyskać funkcję, gdy używasz słowa kluczowego wymaganego. w powyższym przykładzie zmienimy foo = wymagany (a.js); widać, że możemy wywołać foo jako funkcję;
tak wyjaśnia to dokumentacja węzła „Obiekt eksportu jest tworzony przez system Module. Czasami jest to niedopuszczalne, wielu chce, aby jego moduł był instancją jakiejś klasy. Aby to zrobić, przypisz żądany obiekt eksportu do module.exports”.