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

12 set 2022 8 min di lettura
Как создать модуль Node.js
Indice dei contenuti

Введение

В Node.js модуль — это набор функций и объектов JavaScript, которые могут использоваться внешними приложениями. Любой файл Node.js или набор файлов можно считать модулем, если его функции и данные доступны для использования внешними программами.

Возможность писать модули, которые экспортируют полезные функции и данные, позволит вам внести свой вклад в сообщество Node.js, ведь все пакеты, которые вы используете в npm, сгруппированы и разделены как модули. Это делает создание модулей важным навыком для разработчика Node.js.

В этом руководстве вы создадите модуль Node.js, который предлагает, какой цвет веб-разработчикам следует использовать в своих проектах. Вы разработаете модуль, сохранив цвета в виде массива и предоставив функцию для получения одного из них случайным образом. Далее мы рассмотрим различные способы импорта модуля в приложение Node.js.

Предпосылки

Вам понадобятся Node.js и NPM, установленные в вашей среде разработки. Следуйте одному из следующих руководств в зависимости от вашей операционной системы:

Шаг 1: Создайте форму

Этот шаг поможет вам создать свой первый модуль Node.js. Модуль будет содержать набор цветов в массиве и предоставлять функцию для получения одного из них случайным образом. Вы будете использовать свойство exports, встроенное в Node.js, чтобы сделать функцию и массив доступными для внешних программ.

Во-первых, вы начнете с решения, какие данные о цвете будут храниться в форме. Каждый цвет будет объектом, содержащим свойство name, которое можно легко идентифицировать, и свойство code, представляющее собой строку, содержащую код цвета HTML. Цветовые коды HTML – это шестизначные шестнадцатеричные числа, которые позволяют изменять цвет элементов на веб-странице. Подробнее о цветовых кодах HTML можно узнать, прочитав эту статью Цветовые коды и имена HTML.

Затем вы решите, какие цвета вы хотите поддерживать в своей форме. Ваш модуль будет содержать массив с именем allColors, который будет содержать шесть цветов. Модуль также будет включать функцию getRandomColor(), которая будет случайным образом выбирать цвет из массива и возвращать его.

В терминале создайте новую папку с названием colors и перейдите в нее:

mkdir colors
cd colors

Инициализируйте npm, чтобы другие программы могли импортировать этот модуль позже в этом руководстве:

npm init -y

Вы использовали флаг -y, чтобы пропустить обычные инструкции по настройке вашего package.json. Если вы хотите опубликовать форму на npm, вы должны ответить на все эти инструкции соответствующими данными.

В этом случае на выходе будет:

{
 "name": "colors",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC"
 }

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

nano index.js

Сначала определите класс Color. Ваш класс Color будет создан с его именем и HTML-кодом. Добавьте следующие строки, чтобы создать класс:

class Color {
 constructor(name, code) {
 this.name = name;
 this.code = code;
 }
 }

Теперь, когда у вас есть структура данных для Color, добавьте в форму несколько экземпляров. Запишите следующий выделенный массив в свой файл:

 
class Color {
 constructor(name, code) {
 this.name = name;
 this.code = code;
 }
 }

 const allColors = [
 new Color('brightred', '#E74C3C'),
 new Color('soothingpurple', '#9B59B6'),
 new Color('skyblue', '#5DADE2'),
 new Color('leafygreen', '#48C9B0'),
 new Color('sunkissedyellow', '#F4D03F'),
 new Color('groovygray', '#D7DBDD'),
 ];

Наконец, вставьте функцию, которая случайным образом выбирает элемент из только что созданного массива allColors:

 
class Color {
 constructor(name, code) {
 this.name = name;
 this.code = code;
 }
 }

 const allColors = [
 new Color('brightred', '#E74C3C'),
 new Color('soothingpurple', '#9B59B6'),
 new Color('skyblue', '#5DADE2'),
 new Color('leafygreen', '#48C9B0'),
 new Color('sunkissedyellow', '#F4D03F'),
 new Color('groovygray', '#D7DBDD'),
 ];

 exports.getRandomColor = () => {
 return allColors[Math.floor(Math.random() * allColors.length)];
 }

 exports.allColors = allColors;

Ключевое слово exports относится к глобальному объекту, доступному в каждом модуле Node.js. Все функции и объекты, хранящиеся в объекте exports модуля, отображаются, когда другие модули Node.js импортируют его. Функция getRandomColor() была создана непосредственно на объекте exports. Затем к объекту exports было добавлено свойство allColors, которое ссылается на локальный постоянный массив allColors, созданный ранее в сценарии.

Когда другие модули импортируют этот модуль, allColors и getRandomColor() будут открыты и доступны для использования.

Сохраните и закройте файл.

Итак, вы создали модуль, содержащий массив цветов и функцию, возвращающую случайный цвет. Вы также экспортировали массив и функцию, чтобы внешние программы могли их использовать. На следующем этапе вы будете использовать свой модуль в других приложениях, чтобы продемонстрировать эффекты export.

Шаг 2. Протестируйте форму с помощью REPL

Прежде чем создавать полное приложение, найдите время, чтобы убедиться, что ваша форма работает. На этом этапе REPL будет использоваться для загрузки модуля colors. Находясь в REPL, мы будем вызывать getRandomColor(), чтобы увидеть, ведет ли она себя так, как ожидалось.

Запустите Node.js REPL в той же папке, что и файл index.js:

node

Когда REPL запустится, появится сообщение >. Это означает, что вы можете ввести код JavaScript, который будет немедленно оценен.

Сначала введите следующее:

colors = require('./index');

В этой команде require() загружает модуль colors в точке входа. Когда вы нажмете ENTER, вы получите следующий вывод:

{
 getRandomColor: [Function],
 allColors: [
 Color { name: 'brightred', code: '#E74C3C' },
 Color { name: 'soothingpurple', code: '#9B59B6' },
 Color { name: 'skyblue', code: '#5DADE2' },
 Color { name: 'leafygreen', code: '#48C9B0' },
 Color { name: 'sunkissedyellow', code: '#F4D03F' },
 Color { name: 'groovygray', code: '#D7DBDD' }
 ]
 }

REPL показывает нам значение colors, которые являются всеми функциями и объектами, импортированными из файла index.js. При использовании ключевого слова require Node.js возвращает весь контент в объекте exports модуля.

Помните, что вы добавили getRandomColor() и allColors в exports в модуле colors. По этой причине они оба появляются в REPL при импорте.

Протестируйте getRandomColor():

colors.getRandomColor();

Вам будет показан случайный цвет:

Color { name: 'groovygray', code: '#D7DBDD' }

Поскольку индекс является случайным, вывод может варьироваться. Теперь, когда вы убедились, что модуль colors работает, выйдите из Node.js REPL:

.exit

Это вернет вас в командную строку вашего терминала.

Вы только что подтвердили, что ваша форма работает должным образом, используя REPL. Далее вы примените эти же концепции и загрузите свой модуль в приложение, как в реальном проекте.

Шаг 3: Сохраните локальный модуль как зависимость

При тестировании модуля в REPL он был импортирован с относительным путем. Это означает, что вы использовали расположение файла index.js по отношению к рабочему каталогу, чтобы получить его содержимое. Обычно удобно импортировать модули с их именами, чтобы импорт не прерывался при изменении контекста. На этом шаге вы установите модуль colors с помощью функции локального модуля npm install.

Настройте новый модуль Node.js за пределами папки colors. Сначала перейдите в предыдущий каталог и создайте новую папку:

cd..
mkdir really-large-application

Теперь переключитесь на новый проект:

cd really-large-application

Как и в случае с модулем colors, инициализируйте папку с помощью npm:

npm init -y

package.json будет сгенерирован ниже:

{
 "name": "really-large-application",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC"
 }

Теперь установите модуль colors и используйте флаг --save, чтобы он был зарегистрирован в вашем файле package.json:

npm install --save../colors

Вы только что установили модуль colors в новый проект. Откройте файл package.json, чтобы увидеть новую локальную зависимость:

nano package.json

Вы обнаружите, что были добавлены следующие выделенные строки:

 
{
 "name": "really-large-application",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC",
 "dependencies": {
 "colors": "file:../colors"
 }
 }


Выйдите из файла.

Модуль colors был скопирован в ваш каталог node_modules. Убедитесь, что он есть, с помощью следующей команды:

ls node_modules

Это даст следующий результат:

colors

Используйте локальный модуль, установленный в этой новой программе. Снова откройте текстовый редактор и создайте еще один файл JavaScript:

nano index.js

Ваша программа сначала импортирует модуль colors. Затем он выберет случайный цвет, используя getRandomColor(), предоставляемую модулем. Наконец, он напечатает на консоли сообщение, сообщающее пользователю, какой цвет использовать.

Вставьте следующий код в index.js:

const colors = require('colors');

 const chosenColor = colors.getRandomColor();
 console.log(`You should use ${chosenColor.name} on your website. It's HTML code is ${chosenColor.code}`);

Сохраните и закройте файл.

Теперь ваше приложение сообщит пользователю случайный вариант цвета для компонента веб-сайта.

Запустите этот скрипт с помощью:

node index.js

Ваш вывод будет выглядеть так:

You should use leafygreen on your website. It's HTML code is #48C9B0

Теперь вы успешно установили модуль colors и можете работать с ним, как с любым другим пакетом npm, используемым в вашем проекте. Однако, если вы добавили больше цветов и функций в свой модуль локальных colors, вам следует запустить npm update в своих приложениях, чтобы использовать новые параметры. На следующем шаге вы будете использовать модуль локальных colors по-другому и получать автоматические обновления при изменении кода модуля.

Шаг 4: Подключите локальный модуль

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

На этом шаге вы подключите модуль colors к вашему приложению. Вы также измените модуль colors и подтвердите, что его последние изменения работают в приложении без переустановки или обновления.

Сначала удалите локальный модуль:

npm un colors

npm связывает модули с помощью символических ссылок (или символических ссылок), которые указывают на файлы или каталоги на вашем компьютере. Подключение модуля происходит в два этапа:

  1. Создание глобальной ссылки на модуль. npm создает символическую ссылку между вашим глобальным каталогом node_modules и каталогом вашего модуля. Глобальный каталог node_modules — это место, где установлены все общесистемные пакеты npm (любые пакеты, установленные с флагом -g ).
  2. Создайте локальную ссылку. npm создает символическую ссылку между локальным проектом, использующим модуль, и глобальной ссылкой модуля.

Сначала создайте глобальную ссылку, вернувшись в папку с colors и используя команду link:

cd../colors
sudo npm link

После завершения ваша оболочка будет производить:

/usr/local/lib/node_modules/colors -> /home/sammy/colors

Вы только что создали символическую ссылку в папке node_modules в каталоге colors.

Вернитесь в папку really-large-application и свяжите пакет:

cd../really-large-application
sudo npm link colors

Вы получите вывод, аналогичный следующему:

/home/sammy/really-large-application/node_modules/colors -> /usr/local/lib/node_modules/colors -> /home/sammy/colors
Примечаниеlinklnnpm ln colors

Как видно из вывода, вы только что создали символическую ссылку из really-large-application в локальном node_modules на символическую ссылку colors в вашем глобальном node_modules, указывающую на фактический каталог с модулем colors.

Процесс связывания завершен. Запустите файл, чтобы убедиться, что он все еще работает:

node index.js

Ваш вывод будет выглядеть так:

You should use sunkissedyellow on your website. It's HTML code is #F4D03F

Функциональность программы не нарушена. Затем убедитесь, что обновления применяются немедленно. В текстовом редакторе повторно откройте файл index.js в модуле colors:

cd../colors
nano index.js

Теперь добавьте функцию, которая выбирает лучший из существующих оттенков синего. Он не принимает аргументов и всегда возвращает третий элемент массива allColors. Добавьте эти строки в конец файла:

 
class Color {
 constructor(name, code) {
 this.name = name;
 this.code = code;
 }
 }

 const allColors = [
 new Color('brightred', '#E74C3C'),
 new Color('soothingpurple', '#9B59B6'),
 new Color('skyblue', '#5DADE2'),
 new Color('leafygreen', '#48C9B0'),
 new Color('sunkissedyellow', '#F4D03F'),
 new Color('groovygray', '#D7DBDD'),
 ];

 exports.getRandomColor = () => {
 return allColors[Math.floor(Math.random() * allColors.length)];
 }

 exports.allColors = allColors;

 exports.getBlue = () => {
 return allColors[2];
 }


Сохраните и выйдите из файла, затем снова откройте файл index.js в папке really-large-application:

cd../really-large-application
nano index.js

Сделайте вызов только что созданной getBlue() и напечатайте предложение со свойствами цвета. Добавьте эти инструкции в конец файла:

 
const colors = require('colors');

 const chosenColor = colors.getRandomColor();
 console.log(`You should use ${chosenColor.name} on your website. It's HTML code is ${chosenColor.code}`);

 const favoriteColor = colors.getBlue();
 console.log(`My favorite color is ${favoriteColor.name}/${favoriteColor.code}, btw`);

Сохраните и закройте файл.

В коде теперь используется новая функция сборки getBlue(). Запустите файл, как и раньше:

node index.js

Вы получите вывод, например:

You should use brightred on your website. It's HTML code is #E74C3C
 My favorite color is skyblue/#5DADE2, btw

Ваш скрипт смог использовать последнюю функцию в вашем модуле colors без необходимости запуска npm update. Это облегчит внесение изменений в это приложение в процессе разработки.

При написании более крупных и сложных приложений подумайте о том, как сгруппировать связанный код в модули и как эти модули должны быть настроены. Если ваш модуль будет использоваться только одной программой, он может оставаться в том же проекте и ссылаться на него по относительному пути. Если модуль позже будет доступен отдельно или будет находиться в другом месте, чем проект, над которым вы сейчас работаете, установка или связывание могут быть более жизнеспособными. Активные модули разработки также выигрывают от автоматического обновления ссылок. Если модуль не находится в активной разработке, использование npm install может быть самым простым вариантом.

Вывод

Из этого руководства вы узнали, что модуль Node.js — это файл JavaScript с функциями и объектами, которые могут использоваться другими программами. Затем мы создали модуль и связали функции и объекты с глобальным объектом exports, чтобы сделать их доступными для внешних программ. Наконец, вы импортировали этот модуль в программу, демонстрируя, как модули объединяются в более крупные приложения.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.