Модули Node.js дают возможность создания слабосвязанных программ, которые масштабируются в соответствии с увеличением сложности проекта. Написание таких модулей может оказаться полезным для сообщества платформы Node.js, а кроме того, позволяет программисту совершенствовать свои навыки.
Модули Node.js могут быть разных типов, например:
mongodb
, mysql
, sequelize
(для поддержки ORM);net
(работа с TCP- и UDP-сокетами), dns
(работа с системой доменных имен), request
(библиотека для выполнения HTTP-запросов);ejs
(шаблонизатор), socket.io
(библиотека для работы с веб-сокетами), passport
(библиотека для аутентификации и авторизации пользователей).Также отметим, что в Node.js есть встроенные и сторонние модули. Встроенные поставляются с Node.js. Некоторые примеры встроенных расширений: fs
(работа с файлами), http
(работа с протоколом HTTP), crypto
(криптографические функции), path
(работа с путями). Модули, разработанные сторонними разработчиками, можно установить с помощью менеджера пакетов NPM.
В статье мы как раз рассмотрим создание стороннего модуля, который поможет дизайнерам выбирать цвета для своих проектов, а затем узнаем, как импортировать его куда-либо. После этого вы легко сможете создать модуль Node.js любого типа и выполнять с ним различные операции.
Перед созданием модуля Node.js, установите саму платформу вместе с NPM. Node Package Manager — это менеджер пакетов. Он позволяет управлять зависимостями и устанавливать пакеты, необходимые для разработчиков. Также он содержит большое количество уже готовых пакетов и предоставляет удобный способ их установки, обновления и удаления. Кроме того, NPM позволяет создавать и публиковать свои собственные пакеты для использования другими разработчиками.
Установка Node.js с Node Package Manager не представляет особых трудностей. Рассмотрим ее отдельно для Linux и MacOS и для Windows.
Откройте терминал и выполните следующую инструкцию под root
или пользователем с правами sudo
:
apt-get update
apt-get install nodejs
Теперь установите NPM, выполнив инструкцию:
apt-get install npm
Проверьте версии платформы и менеджера, выполнив инструкции:
node -v
npm -v
Скачайте установочный файл Node.js с официального сайта и запустите его. Установите платформу вместе с пакетным менеджером, следуя инструкциям установщика. После установки проверьте версии Node.js и NPM. Для этого, открыв командную строку (нажмите Win+R и введите cmd
), выполните инструкции:
node -v
npm -v
Если версии программ успешно отображаются в терминале, значит установка прошла успешно, и можно начать использовать их для разработки вашего первого модуля.
Открываем терминал, создаем каталог и переходим туда:
mkdir colors
cd colors
Теперь инициализируем Node Package Manager, чтобы дать возможность импорта:
npm init -y
Флаг -y
задействуется для пропуска ненужных диалогов при конфигурировании package.json (этот файл нам еще понадобится). В ответ будет создан package.json
с информацией об имени, основном файле, скриптах и отсутствии ошибок в них, а также рядом других параметров (описание, версия, ключевые слова, автор, лицензия и т.д.):
Теперь открываем nano
или другой удобный для вас редактор и создаем новый файл. Этот файл необходим для того, чтобы создать точку входа. Вот так это делается на примере nano
:
nano index.js
Таким образом мы создадим файл по пути: ~/colors/index.js
.
Теперь определяем класс, экземпляр которого будет иметь имя, а также код. Прописываем:
class Color {
constructor(name, code) {
this.name = name;
this.code = code;
}
}
Далее записываем в файл цвета. Давайте сделаем это на примере нескольких оттенков красного:
const allColors = [
new Color('IndianRed', '#CD5C5C'),
new Color('LightCoral', '#F08080'),
new Color('Salmon', '#FA8072'),
new Color('Crimson', '#DC143C'),
new Color('FireBrick', '#B22222'),
new Color('DarkRed', '#8B0000'),
];
И создаем функцию, предназначенную для рандомного выбора:
exports.getRandomColor = () => {
return allColors[Math.floor(Math.random() * allColors.length)];
}
exports.allColors = allColors;
Всё, что хранится в ключе exports
, будет открыто при импорте. Теперь сохраняем и закрываем файл (в nano
для этого необходимо нажать Ctrl+X, а после Y для сохранения изменений) и приступаем к следующему необходимому шагу.
Для этого нам потребуются некоторые навыки работы с одним из инструментов: REPL. REPL — это интерактивная среда, которая позволяет пользователю вводить команды на определенном языке программирования, которые затем немедленно выполняются и выводятся на экран. Таким образом, REPL позволяет тестировать и отлаживать код пошагово, не создавая целых программ или скриптов. Пользователь может вводить команды по одной и сразу же видеть результат их исполнения, что делает процесс разработки более быстрым и эффективным. REPL используется для разработки программ не только на JavaScript, но также поддерживает и многие другие языки, в том числе Python, Ruby, Lisp и т.д.
Итак, сначала запускаем REPL простой инструкцией:
node
Теперь вводим в интерфейсе REPL следующее (здесь мы также используем «родной» язык платформы, JS):
colors = require('./index');
И нажимаем Enter, выводя список наших цветов с их шестнадцатеричными кодами. Вот что вы увидите:
Теперь приступаем собственно к тестированию, вводя:
colors.getRandomColor();
Программа должна вывести нам случайный цвет. Чтобы удостовериться в этом, попробуйте ввести эту инструкцию еще несколько раз. На этом тестирование можно считать успешно завершенным, но нужно не забыть выйти из REPL следующей инструкцией:
.exit
Это понадобится нам, чтобы обеспечить работу модулей независимо от условий (например, при изменении директории проекта). Чтобы сделать это, создаем новый модуль. Располагаем его в какой-либо другой директории за пределами нашего проекта и переходим туда:
mkdir other_nodejs_project
cd other_nodejs_project
Далее инициализируем новый модуль при помощи Node Package Manager:
npm init -y
NPM сгенерирует нам новый package.json
. Далее инсталлируем туда наш модуль colors
c записью, вот так:
npm install --save ../colors
Задействуем nano
:
nano package.json
Мы должны увидеть, что добавились строчки зависимостей:
Закрываем файл и проверяем расположение нашего основного модуля, вот так:
ls node_modules
В выводе должно появиться имя нашего модуля. Далее вводим:
nano index.js
И проверяем корректность работы:
const colors = require('colors');
const chosenColor = colors.getRandomColor();
console.log(`Предлагаем использовать цвет ${chosenColor.name} на своем сайте. Его код HTML ${chosenColor.code}`);
Эта инструкция в новом index.js
позволит вам импортировать рабочий модуль с цветами, а затем выбрать случайный оттенок и получить информацию о том, что с ним делать.
Теперь сохраняем изменения, закрываем файл и запускаем скрипт:
node index.js
В ответ мы получим случайный цвет с рекомендацией и шестнадцатеричным кодом:
Предлагаем использовать цвет FireBrick на своем сайте. Его код #B22222
Чтобы убедиться в том, что программа выдает рандомные цвета, запустите ее еще несколько раз. Теперь можно добавить любое количество новых цветов, только не забывайте после этого обновлять модуль инструкцией:
npm update
А мы переходим к завершающему этапу.
Это понадобится нам для того, чтобы пакеты, содержащие наш модуль, обновлялись сами при вносимых изменениях в самом модуле. В процессе разработки программист постоянно вносит изменения в код, и обновлять все используемые этот пакет зависимости вручную, конечно же, крайне неудобно. Поэтому в первую очередь выполняем удаление локального модуля инструкцией:
npm un colors
Теперь добавляем глобальную ссылку следующим образом:
cd ../colors
sudo npm link
Далее возвращаемся в директорию other_nodejs_project
:
cd ../other_nodejs_project
sudo npm link colors
Вот и всё, мы привязали локальный модуль, теперь проверяем, как он работает, уже привычным способом:
node index.js
В результате мы получим рандомное значение с комментарием, как в примере выше:
Предлагаем использовать цвет FireBrick на своем сайте. Его код #B22222
Осталось совсем немного, проверить применение обновлений:
cd ../colors
nano index.js
И добавляем вниз (вместо зеленого можно выбрать и любой другой цвет):
exports.getGreen = () => {
return allColors[2];
}
Сохраняем и закрываем файл и опять открываем его, но в другой директории:
cd ../other_nodejs_project
nano index.js
Добавляем внизу:
const favoriteColor = colors.getGreen();
console.log(`Кстати, мой любимый цвет ${favoriteColor.name}/${favoriteColor.code}`);
Еще раз сохраняем и закрываем файл и запускаем его для проверки:
node index.js
Вывод должен быть примерно таким:
Предлагаем использовать цвет FireBrick на своем сайте. Его код #B22222
Кстати, мой любимый цвет green/#008000
Как видим, нам не пришлось обновлять модуль через NPM. Добавим, что такой способ обновления подойдет, когда разработчики активно работают с кодом, постоянно изменяя его. В противном случае достаточно использования инструкции npm install
по установке модуля.
Итак, мы научились создавать сами модули и тестировать их, а также обеспечивать их независимую работу и выполнять привязку для того, чтобы облегчить обновление приложений, использующих наши модули. Желаем успехов в создании новых модулей!