у файлі njs js module.js використовується для запуску module.load system. Кожен раз, коли вузол виконує файл, він оберне ваш вміст файлу js таким чином
'(function (exports, require, module, __filename, __dirname) {',+
//your js file content
'\n});'
через таке обгортання всередині вихідного коду ur js ви можете отримати доступ до експорту, вимагати, модуля тощо. Цей підхід застосовується, тому що немає іншого способу отримати функціональність, записану у js-файл до іншого.
потім вузол виконує цю обгорнуту функцію за допомогою c ++. в цей момент об'єкт експорту, що перейшов у цю функцію, буде заповнений.
Ви можете побачити всередині цієї функції параметри експорту та модуля. фактично експорт є публічним членом функції конструктора модулів.
подивіться наступний код
скопіюйте цей код у 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();
скопіюйте цей код на 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');}
тепер запустіть за допомогою вузла
це вихід
module is [object Object]
object.keys id,exports,parent,filename,loaded,children,paths
{}
true
експорт - [об'єкт]
object.keys foo: name is function () {console.log ('функція експорту модуля')} функція для експорту модуля
тепер видаліть коментований рядок у a.js та прокоментуйте рядок над цим рядком та видаліть останній рядок b.js та запустіть.
у світі javascript ви не можете перепризначити об'єкт, переданий як параметр, але ви можете змінити публічний член функції, коли об’єкт цієї функції встановлено як параметр на іншу функцію
пам'ятаю
використовуйте module.exports увімкнено і лише якщо ви хочете отримати функцію, коли ви використовуєте потрібне ключове слово. у наведеному вище прикладі ми var foo = вимагаємо (a.js); ви можете бачити, що ми можемо викликати foo як функцію;
так пояснюється це документація на вузол "Об'єкт експорту створюється системою Module. Іноді це не прийнятно, багато хто хоче, щоб їх модуль був екземпляром якогось класу. Для цього призначте потрібний об'єкт експорту module.exports."