Если вы хотите сопоставить все, что начинается с «stop», включая «stop going», «stop» и «stopping» использовать:
^ stop
Если вы хотите совместить слово word , за которым следует что-либо, как в «остановке», «остановите это», но не «остановитесь», а не «остановите» использование:
^ stop \ W
module.exports
- это объект, который фактически возвращается в результате вызова require
.
Первоначально переменная exports
установлена на тот же объект (т. е. это сокращенный «псевдоним»), поэтому в коде модуля вы обычно пишете что-то вроде этого:
var myFunc1 = function() { ... };
var myFunc2 = function() { ... };
exports.myFunc1 = myFunc1;
exports.myFunc2 = myFunc2;
для экспорта (или «раскрытия») функций с внутренним охватом myFunc1
и myFunc2
.
И в вызывающем коде вы должны использовать:
var m = require('./mymodule');
m.myFunc1();
, где последняя строка показывает, как результат require
является (обычно) просто обычным объектом, свойства которого могут
Примечание: если вы перезапишете exports
, то он больше не будет ссылаться на module.exports
. Поэтому, если вы хотите назначить новый объект (или ссылку на функцию) на exports
, вы также должны назначить этот новый объект module.exports
. Следует отметить, что имя добавлено в exports
объект не должен совпадать с внутренним облачным именем модуля для значения, которое вы добавляете, поэтому вы можете иметь:
var myVeryLongInternalName = function() { ... };
exports.shortName = myVeryLongInternalName;
// add other objects, functions, as required
, за которым следует:
var m = require('./mymodule');
m.shortName(); // invokes module.myVeryLongInternalName
] Несколько вещей, которые вы должны позаботиться, если назначить ссылку на новый объект на exports
и / или modules.exports
:
exports
или module.exports
, конечно, потеряны, потому что экспортируемый объект теперь ссылается на другую новую . Это очевидно, но если вы добавите экспортированный метод в начало существующего модуля, убедитесь, что собственный экспортированный объект не ссылается на другой объект в конце
exports.method1 = function () {}; // exposed to the original exported object
exports.method2 = function () {}; // exposed to the original exported object
module.exports.method3 = function () {}; // exposed with method1 & method2
var otherAPI = {
// some properties and/or methods
}
exports = otherAPI; // replace the original API (works also with module.exports)
exports
или module.exports
ссылается на новое значение, они больше не ссылаются на один и тот же объект exports = function AConstructor() {}; // override the original exported object
exports.method2 = function () {}; // exposed to the new exported object
// method added to the original exports object which not exposed any more
module.exports.method3 = function () {};
exports
и module.exports
, трудно сказать, какой API открыт (это выглядит как module.exports
) // override the original exported object
module.exports = function AConstructor() {};
// try to override the original exported object
// but module.exports will be exposed instead
exports = function AnotherConstructor() {};
Модуль инкапсулирует связанный код в единую единицу кода. При создании модуля это можно интерпретировать как перемещение всех связанных функций в файл.
Предположим, что есть файл Hello.js, который включает в себя две функции
sayHelloInEnglish = function() {
return "Hello";
};
sayHelloInSpanish = function() {
return "Hola";
};
. Мы пишем функцию только тогда, когда полезность кода имеет более одного вызова.
Предположим, что мы хотим повысить полезность функции в другом файле, скажем World.js, в этом случае экспортируется файл, который может быть получен с помощью module.exports.
Вы можете просто экспортировать оба функция по приведенному ниже коду
var anyVariable={
sayHelloInEnglish = function() {
return "Hello";
};
sayHelloInSpanish = function() {
return "Hola";
};
}
module.export=anyVariable;
Теперь вам нужно просто потребовать, чтобы имя файла в World.js inorder использовало эти функции
var world= require("./hello.js");
При делении кода программы на несколько файлов module.exports
используется для публикации переменных и функций для потребителя модуля. Вызов require()
в исходном файле заменяется соответствующим module.exports
, загруженным из модуля.
Помните, что при записи модулей
module.exports
также доступен как сокращенное exports
. Но при возврате единственной функции всегда используйте module.exports
. [/g1]
Согласно: «Модули Часть 2 - Написание модулей» .
require
начинается с папки, в которой вы выполняете node app.js
. Я рекомендую вам опубликовать новый вопрос с явными примерами структуры кода + папки, чтобы получить более четкий ответ.
– Jed Watson
20 February 2013 в 14:35
var sayHello = require('./ex6_module.js'); console.log(sayHello());
и модуль: module.exports = exports = function() { return "Hello World!"; }
– Jason Lydon
23 July 2014 в 15:21
Есть некоторые по умолчанию или существующие модули в node.js при загрузке и установке node.js, таких как http, sys и т. д.
Поскольку они уже находятся в node.js , когда мы хотим использовать эти модули, мы в основном используем модули импорта , но почему? потому что они уже присутствуют в node.js. Импорт - это как перенос их из node.js и включение их в вашу программу. И затем, используя их.
В то время как Экспорт в точности противоположный, вы создаете модуль, который вы хотите, скажем, module addition.js и помещаем этот модуль в node.js , вы делаете это, экспортируя его.
Прежде чем написать что-нибудь здесь, помните, module.exports.additionTwo такой же, как export.additionTwo
поэтому это нам нравится
exports.additionTwo = function(x)
{return x+2;};
Будьте осторожны с дорожкой
Допустим, вы создали модуль add.js,
exports.additionTwo = function(x){
return x + 2;
};
Когда вы запустите это в своей командной строке NODE.JS:
node
var run = require('addition.js');
Это приведет к ошибке, сказав, что
Ошибка: не удается найти модуль addition.js
blockquote>Это связано с тем, что процесс node.js не может скомпоновать add.js, так как мы не упоминали путь. Таким образом, мы можем установить путь, используя NODE_PATH
set NODE_PATH = path/to/your/additon.js
. Теперь это должно успешно работать без каких-либо ошибок!
Еще одна вещь: вы также можете запустить добавление. js, не устанавливая NODE_PATH, вернитесь к командной строке nodejs:
node var run = require('./addition.js');
Поскольку мы предоставляем путь здесь, говоря, что он находится в текущем каталоге
./
, это также должно успешно выполняться.
свойство module.exports или объект экспорта позволяет модулю выбирать, что должно быть совместно использовано с приложением
[/g1]
У меня есть видео на Доступен модуль_экспорт здесь
Цель:
Модульное программирование - это технология разработки программного обеспечения, которая подчеркивает разделение функциональности программы на независимые взаимозаменяемые модули, так что каждая из них содержит все необходимое для выполнения только одного аспекта желаемая функциональность.
Я полагаю, что становится сложно писать большие программы без модульного / многоразового кода. В nodejs мы можем создавать модульные программы, используя
module.exports
, определяя, что мы открываем и составляем нашу программу с помощьюrequire
.Попробуйте этот пример:
fileLog .js
function log(string) { require('fs').appendFileSync('log.txt',string); } module.exports = log;
stdoutLog.js
function log(string) { console.log(string); } module.exports = log;
program.js
const log = require('./stdoutLog.js') log('hello world!');
выполнить
$ node program.js
hello world!
Теперь попробуйте выполнить обмен файлами ./stdoutLog.js для ./fileLog.js.
ссылка ссылается следующим образом:
exports = module.exports = function(){
//....
}
свойства exports
или module.exports
, такие как функции или переменные, будут экспонированы вне
, существует что вы должны уделять больше внимания: не экспортируйте override
.
почему?
, поскольку экспортирует только ссылку на module.exports, вы можете добавить свойства в экспорт, но если вы переопределите экспорт, ссылка будет нарушена.
хороший пример:
exports.name = 'william';
exports.getName = function(){
console.log(this.name);
}
плохой пример:
exports = 'william';
exports = function(){
//...
}
Если вы просто хотите разоблачить только одну функцию или переменную, например:
// test.js
var name = 'william';
module.exports = function(){
console.log(name);
}
// index.js
var test = require('./test');
test();
этот модуль обнаружил только одну функцию, а свойство имени является закрытым для внешнего.