Выразительный JavaScript (Хавербеке) - страница 216

Для доступа к аргументам командной строки, переданным программе, можно читать массив строк >process.argv. В него также включены имя команды >node и имя вашего скрипта, поэтому список аргументов начинается с индекса 2. Если файл >showargv.js содержит только инструкцию >console.log(process.argv), его можно запустить так:

>$ node showargv.js one --and two

>["node", "/home/marijn/showargv.js", "one", "--and", "two"]

Все стандартные глобальные переменные JavaScript — >Array, >Math, >JSON, также есть в окружении Node. Но там отсутствует функционал, связанный с работой браузера, например >document или >alert.

Объект глобальной области видимости, который в браузере называется >window, в Node имеет более осмысленное название >global.

Модули

Кроме нескольких упомянутых переменных, вроде >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 определяет библиотеку искажения строк, которая может использоваться как заданной ранее программой для командной строки, так и другими скриптами, которым нужен прямой доступ к функции