Книга: Выразительный JavaScript
Модули
Модули
Кроме нескольких упомянутых переменных, вроде console
и process
, Node держит мало функционала в глобальной области видимости. Для доступа к остальным встроенным возможностям вам надо обращаться к системе модулей.
Система CommonJS, основанная на функции require
, была описана в главе 10. Такая система встроена в Node и используется для загрузки всего, от встроенных модулей и скачанных библиотек до файлов, являющихся частями вашей программы.
При вызове require
Node нужно преобразовать заданную строку в имя файла. Пути, начинающиеся с "/"
, "./"
или "../"
, преобразуются относительно пути к текущему модулю, где "./"
означает текущую директорию, "../"
– директорию выше, а "/"
– корневую директорию файловой системы. Если вы запросите "./world/world"
из файла /home/marijn/elife/run.js
, Node попробует загрузить файл /home/marijn/elife/world/world.js
. Расширение .js
можно опускать.
Когда передаётся строка, которая не выглядит как относительный или абсолютный путь, то предполагается, что это либо встроенный модуль, или модуль, установленный в директории node_modules
. К примеру, require("fs")
выдаст вам встроенный модуль для работы с файловой системой, а require("elife")
попробует загрузить библиотеку из node_modules/elife/
. Типичный метод установки библиотек – при помощи NPM, к которому я вернусь позже.
Для демонстрации давайте сделаем простой проект из двух файлов. Первый назовём main.js
, и в нём будет определён скрипт, вызываемый из командной строки, предназначенный для искажения строк.
var garble = require("./garble");
// По индексу 2 содержится первый аргумент программы из командной строки
var argument = process.argv[2];
console.log(garble(argument));
Файл garble.js
определяет библиотеку искажения строк, которая может использоваться как заданной ранее программой для командной строки, так и другими скриптами, которым нужен прямой доступ к функции garble
.
module.exports = function(string) {
return string.split("").map(function(ch) {
return String.fromCharCode(ch.charCodeAt(0) + 5);
}).join("");
};
Замена module.exports
вместо добавления к нему свойств позволяет нам экспортировать определённое значение из модуля. В данном случае, результатом запроса нашего модуля получится сама функция искажения.
Функция разбивает строку на символы, используя split
с пустой строкой, и затем заменяет все символы на другие, с кодом на 5 единиц выше. Затем она соединяет результат обратно в строку.
Теперь мы можем вызвать наш инструмент:
$ node main.js JavaScript
Of{fXhwnuy
- Модули констукторов заданий
- Речевые модули для «холодного» звонка с целью назначить встречу
- Речевые модули для завершения продажи
- 3.3.3. Модули аутентификации
- 7.2. Модули
- Речевые модули для прохода секретаря
- Речевые модули для скрипта
- Речевые модули для работы с возражениями
- Речевые модули для объяснения секретарю причины и цели звонка
- Глава 16 Модули
- 10.2. Осторожно, за вами следят шпионские модули SpyWare!
- Модули в Python