Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Как создать модуль Node.js

Роман Андреев
Роман Андреев
Технический писатель
12 мая 2023 г.
547
8 минут чтения
Средний рейтинг статьи: 5

Модули 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.

  • Для установки Node.js и NPM на Linux и MacOS:

Откройте терминал и выполните следующую инструкцию под root или пользователем с правами sudo:

apt-get update
apt-get install nodejs

Теперь установите NPM, выполнив инструкцию:

apt-get install npm

Проверьте версии платформы и менеджера, выполнив инструкции:

node -v
npm -v
  • Для установки Node.js и NPM на Windows:

Скачайте установочный файл 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 с информацией об имени, основном файле, скриптах и отсутствии ошибок в них, а также рядом других параметров (описание, версия, ключевые слова, автор, лицензия и т.д.):

Image1

Теперь открываем 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, выводя список наших цветов с их шестнадцатеричными кодами. Вот что вы увидите:

Image3

Теперь приступаем собственно к тестированию, вводя:

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

Мы должны увидеть, что добавились строчки зависимостей:

Image2

Закрываем файл и проверяем расположение нашего основного модуля, вот так:

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 по установке модуля.

Подводим итоги

Итак, мы научились создавать сами модули и тестировать их, а также обеспечивать их независимую работу и выполнять привязку для того, чтобы облегчить обновление приложений, использующих наши модули. Желаем успехов в создании новых модулей!

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону