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

NPM – это больше, чем просто >npm install. Он читает файлы >package.json, содержащие информацию в формате JSON про программу или библиотеку, в частности, на каких библиотеках она основана. Выполнение >npm install в директории, содержащей такой файл, автоматически приводит к установке всех зависимостей, и в свою очередь их зависимостей. Также инструмент >npm используется для размещения библиотек в онлайновом хранилище NPM, чтобы другие люди могли их находить, скачивать и использовать.

Больше мы не будем углубляться в детали использования NPM. Обращайтесь на npmjs.org за документацией поиску библиотек.

Модуль file system

Один из самых востребованных встроенных модулей Node – модуль >“fs”, что означает «файловая система». Модуль обеспечивает функционал для работы с файлами и директориями.

К примеру, есть функция >readFile, читающая файл и делающая обратный вызов с содержимым файла.

>var fs = require("fs");

>fs.readFile("file.txt", "utf8", function(error, text) {

>  if (error)

>    throw error;

>  console.log("А в файле том было:", text);

>});

Второй аргумент >readFile задаёт кодировку символов, в которой нужно преобразовывать содержимое файла в строку. Текст можно преобразовать в двоичные данные разными способами, но самым новым из них является UTF-8. Если у вас нет оснований полагать, что в файле содержится текст в другой кодировке, можно смело передавать параметр >"utf8". Если вы не задали кодировку, Node выдаст вам данные в двоичной кодировке в виде объекта >Buffer, а не строки. Это массивоподобный объект, содержащий байты из файла.

>var fs = require("fs");

>fs.readFile("file.txt", function(error, buffer) {

>  if (error)

>    throw error;

>  console.log("В файле было ", buffer.length, " байт.",

>              "Первый байт:", buffer[0]);

>});

Схожая функция, >writeFile, используется для записи файла на диск.

>var fs = require("fs");

>fs.writeFile("graffiti.txt", "Здесь был Node ", function(err) {

>  if (err)

>    console.log("Ничего не вышло, и вот почему:", err);

>  else

>    console.log("Запись успешна. Все свободны.");

>});

Здесь задавать кодировку не нужно, потому что >writeFile полагает, что если ей на запись дали строку, а не объект >Buffer, то её надо выводить в виде текста с кодировкой по умолчанию UTF-8.

Модуль >“fs” содержит много полезного: функция >readdir возвращает список файлов директории в виде массива строк, >stat вернёт информацию о файле, >rename переименовывает файл, >unlink удаляет, и т. п. См. документацию на nodejs.org.

Многие функции >“fs” имеют как синхронный, так и асинхронный вариант. К примеру, есть синхронный вариант функции