Введение и информация
Через официальный API node.js мы видим, что сама node.js предоставляет много основных модулей http://nodejs.org/api/. Эти основные модули собираются в двоичные файлы и могут быть получены с помощью требований («Имя модуля»); Модуль Core имеет самый высокий приоритет загрузки (он будет отражен, когда есть модуль и модуль Core с тем же именем)
(На этот раз мы в основном говорим о пользовательских модулях)
Node.js также имеет тип модуля, который представляет собой файловый модуль, который может быть файлом кода JavaScript (.js в качестве суффикса файла), текстовый файл формата формата JSON (.json в качестве суффикса файла) или отредактированный файл c/c ++ (.node в качестве суффикса файла);
Метод доступа к модулю файлового модуля доступен через require ('/filename.suffix') require ('./ filename.suffix') requrie ('../ filename.suffix'), а суффикс файла может быть пропущен; Начиная с "/" загружено с абсолютным путем, начиная с "./" и начинается с "../" означает загрузку с относительным путем и начинается с "./" "означает загрузку с файлом в каталоге того же уровня,
Суффикс файла, упомянутый ранее, может быть опущен, приоритетный файл JS, который Nodejs пытается загрузить> файл JSON> Файл узла
Создать пользовательский модуль
Принять счетчик в качестве примера
Кода -копия выглядит следующим образом:
var outputVal = 0; // Выходное значение
var Increment = 1; // Приращение
/* Установить выходное значение*/
Функция seoutputval (val) {
outputVal = val;
}
/* Установить приращение*/
функция setIncrement (urcementVal) {
Приращение = IncrementVal;
}
/* Выход*/
Функция printNextCount ()
{
outputVal += увеличение;
console.log (outputVal);
}
функция printOutputVal () {
console.log (outputVal);
}
exports.seoutputval = seoutputval;
exports.setIncrent = setIncrement;
module.exports.printnextcount = printNextCount;
Пользовательский модуль пример исходного кода
В центре внимания пример - экспорт и модуль.exports; Он предоставляет интерфейс внешнего доступа. Назовем это, чтобы увидеть эффект.
Вызов пользовательских модулей
Кода -копия выглядит следующим образом:
/*
Файл node.js - это модуль, который может быть кодом JavaScript, JSON или составленные расширения C/C ++.
Два важных объекта:
Требуется получить модули снаружи
Экспорт обнаруживает интерфейс модуля
*/
var counter = require ('./ 1_modules_custom_counter');
console.log ('первый вызов в модуль [1_modules_custom_counter]');
counter.seoutputval (10); // установить подсчет, начиная с 10
counter.setincrement (10); // Установить приращение на 10
counter.printnextcount ();
counter.printnextcount ();
counter.printnextcount ();
counter.printnextcount ();
/*
Требовать вызовы в одном и том же модуле несколько раз не будут загружаться многократно
*/
var counter = require ('./ 1_modules_custom_counter');
console.log ('модуль второго вызова [1_modules_custom_counter]');
counter.printnextcount ();
Исходный код вызова пользовательского режима
Запустите его и обнаружите, что оба метода, подвергшиеся воздействию общественности с помощью экспорта и модуля. Exports можно получить!
Как вы можете видеть в примере, я получаю модуль дважды, требуя ('./ 1_Modules_custom_counter'), но после второй ссылки я вызываю метод printnextcount () с 60 ~~~
Причина в том, что node.js вызывает один и тот же модуль несколько раз через WorteRequirequire и не будет загружаться неоднократно. Node.js будет кэшировать все загруженные файловые модули в соответствии с именем файла, поэтому он не будет перезагружен.
Примечание. Кэширование через имя файла относится к фактическому имени файла, и оно не будет считаться разными файлами, поскольку входящий путь отличается.
Существует метод printOutputVal () в файле 1_MODULES_CUSTOM_COUNTER, который я создал, который не предоставляет методы публичного доступа с помощью экспорта или модуля.
Что произойдет, если вы непосредственно получаете доступ к файлу 1_Modules_load?
Ответ: typeError: Object #<Object> не имеет метода 'printOutputVal'
Разница между экспортом и модулем.
Через приведенный выше пример как экспорт, так и модуль. Экспорты доступны для доступа! Поскольку оба могут достичь эффекта, должна быть небольшая разница ~~~ Давайте возьмем пример!
Кода -копия выглядит следующим образом:
var счетчик = 0;
exports.printnextcount = function () {
счетчик += 2;
console.log (счетчик);
}
var Iseq = (exports === module.exports);
console.log (ISEQ);
2_modules_diff_exports.js исходный код файла
Давайте создадим новый файл 2_modules_diff_exports_load.js и вызовут его
Кода -копия выглядит следующим образом:
var counter = require ('./ 2_modules_diff_exports');
Counter.printnextcount ();
После вызова результат выполнения, как показано на рисунке выше
Я выводит значение ISEQ в файле 2_MODULES_DIFF_EXPORTS_LOAD.JS (var ISEQ = (EXPORTS === MODULE.EXPORTS);), возвращаемое истинное
PS: Обратите внимание, что есть три равных знаков. Если вы не знаете, что вы ищете информацию самостоятельно!
Не спешите делать выводы, измените эти два файла JS на соответствующие коды Module.exports
Кода -копия выглядит следующим образом:
// Измененный исходный код 2_Modules_diff_exports.js выглядит следующим образом
var счетчик = 0;
module.exports = function () {
счетчик += 10;
this.printnextcount = function ()
{
console.log (счетчик);
}
}
var Iseq = (exports === module.exports);
console.log (ISEQ);
Кода -копия выглядит следующим образом:
// Измененный исходный код файла 2_modules_diff_exports_load.js выглядит следующим образом
var counter = require ('./ 2_modules_diff_exports');
var countobj = new counter ();
controbj.printnextcount ();
После вызова результат выполнения, как показано на рисунке выше
I выводит значение ISEQ в файле 2_MODULES_DIFF_EXPORTS_LOAD.JS (var ISEQ = (EXPORTS === MODULE.EXPORTS);), и возвращаемый FALSE, что несовместимо с результатом, полученным ранее!
PS: не используйте counter.printnextcount (); Чтобы получить доступ, вы получите только операцию по ошибке
API дает объяснение
http://nodejs.org/api/modules.html
Обратите внимание, что экспорт является ссылкой на модуль. Exports, что делает его подходящим только для увеличения. Если вы экспортируете один элемент, такой как конструктор, вы захотите использовать модуль.
Экспорт - это всего лишь ссылка на адрес Module.exports. Nodejs будет экспортировать только указатель модуля. Exports. Если указатель экспорта изменился, просто экспорт не указывает на Module.exports, поэтому они больше не будут экспортироваться.
Обратитесь к другому пониманию:
http://www.hacksparrow.com/node-js-exports-vs-module-exports.html
http://zihua.li/2012/03/use-module-exports-or-exports-in-node/
Module.exports - это настоящий интерфейс, экспорт - это всего лишь вспомогательный инструмент для него. Окончательным возвратом к вызову является module.exports вместо экспорта.
Все свойства и методы, собранные экспортом, присваиваются модуле. Exports. Конечно, существует предпосылка для этого, то есть модуль.
Если Module.exports уже обладает некоторыми свойствами и методами, информация, собранная экспортом, будет проигнорирована.
Экспорт и модуль. Экспорты переопределяют
Вышеуказанное также в основном понимает взаимосвязь и разницу между экспортом и модулем.
Вызовать результат
Как видно из результатов, ошибки нет, что означает, что ее можно определить, но в конечном модуле. Экспорты перезаписывают экспорт
Несмотря на то, что результат не будет поставлен по ошибке, если вы используете его так, в разработке неизбежно возникнут некоторые проблемы.
1. Лучше не определять модуль. Экспорты и экспорт отдельно
2. Разработчики nodejs рекомендуют модуль. Экспорты для экспорта объектов и экспорта в экспорт нескольких методов и переменных.
другой...
В API представлены другие методы, поэтому я не буду вдаваться в подробности. Основываясь на приведенном выше примере, вы сами узнаете это самостоятельно, как только вы его выведете.
Module.id
Возвращает идентификатор модуля строки типа, который, как правило, является полностью проанализированным именем файла
module.filename
Возвращает полностью проанализированное имя файла типа строки
module.laded
Возвращает тип Bool, указывая, завершена ли загрузка
module.parent
Возвращает модуль, который ссылается на модуль
Module.Children
Возвращает массив всех объектов модуля, на которые ссылается этот модуль