Модули являются одной из фундаментальных особенностей Node.js.
Когда вы создаете приложение, поскольку код становится все более и сложнее, вы не можете поместить весь свой код в один файл.
Поскольку это становится неуправляемым, вы можете использовать модуль узла для записи разных файлов и экспортировать их (включая функции, объекты и методы) в основной файл.
Теперь вы можете спросить – что именно модуль ?
Простые термины, а модуль это не что иное, как файл JavaScript. Это оно.
С модульной функциональностью узла мы можем импортировать наши собственные внешние файлы, модули сердечника (нативных) узлов и модули NPM. В этой статье мы обсудим каждый из них подробно.
Как импортировать свои собственные файлы
В этой статье мы собираемся обсудить, как мы можем экспортировать и импортировать наши собственные файлы.
По сути, есть два файла: Calculate.js откуда мы экспортируем, а main.js Куда мы импортируем этот файл.
У нас есть оба файла в той же папке, чтобы сохранить ее просты.
Как импортировать функцию
//---- Exported file [calculate.js] ----
const add = (a,b)=>{
return a + b
}
module.exports = add
Здесь мы экспортируем функцию под названием Добавить Использование Module.exports Отказ Тогда эта функция импортируется в другой файл, используя требуется метод.
В узле каждый файл упоминается как модуль и Экспорт это свойство объекта модуля.
Теперь мы можем вызовить функцию в другом файле, то есть main.js , передавая аргументы, как показано ниже.
//------ Main File[main.js] ----
const add = require('./calculate') //name of the desired file
const result = add(2,4)
console.log(result); //Output : 6
Как импортировать объект
Мы также можем экспортировать целый объект и получить доступ к различным методам в нем.
//---- Exported file [calculate.js] ----
const add = {
result : (a,b)=>{
return a + b
}
}
module.exports = add
Мы экспортировали объект Добавить и импортировал его в наш основной файл, используя требуется метод.
Теперь мы можем получить доступ к Результат Метод Добавить Объект с использованием Отказ Точечный оператор:
//---- Main file[main.js] ----
const add = require('./calculate')
const result = add.result(5,8)
console.log(result) //Output : 13
Другим способом мы можем экспортировать вышеуказанный объект, является только экспортом метода, который мы требуем, а не весь объект.
//---- Exported file [calculate.js] ----
const add = {
result : (a,b)=>{
return a + b
}
}
module.exports = add.result
Как видите, мы импортируем Результат Метод в Добавить объект. Таким образом, этот метод может быть напрямую вызван в основном файле.
Это хорошая практика, если вам не нужен весь объект, но требуется только некоторые методы/функции. Это также делает наш код более безопасным.
//---- Main file[main.js] ----
const add = require('./calculate')
const result = add(5,8)
console.log(result) //Output : 13
Как импортировать конструктор функции:
Конструктор функции в основном используется для создания нового экземпляра объекта, который обладает теми же свойствами, что и у основного объекта/функции.
В следующем случае мы создаем новый экземпляр объекта «Добавить», используя новый ключевое слово. Этот процесс, где мы создаем экземпляр объекта, называется «мнением».
Затем мы экспортируем этот экземпляр, используя Module.exports :
//---- Exported file [calculate.js] ----
function Add (){
this.result = (a,b)=>{
return a + b
}
}
module.exports = new Add()
Теперь мы можем импортировать его в наш основной файл и получить доступ к способу «результата» внутри него, чтобы получить наше расчетное значение.
//---- Main file[main.js] ----
const add = require('./calculate2')
const result = add.result(1,3)
console.log(result); //Output : 4
Таким образом, мы можем экспортировать и импортировать конструктор функции.
Есть еще один способ сделать это, что, создав наш новый экземпляр в основном файле, а не в экспортированном файле, как показано выше Module.exports Add () Отказ
Посмотрим, как это работает, когда мы экспортируем классы ES6, которые работают аналогично конструкциям функций.
Как импортировать классы ES6
класс это специальный тип функции, где класс Ключевое слово помогает инициализировать его. Используется Конструктор Способ хранения свойств.
Теперь мы собираемся экспортировать весь класс Использование Module.exports :
//---- Exported file [calculate.js] ----
const Add = class{
constructor(a,b){
this.a = a;
this.b = b;
}
result(){
return this.a + this.b
}
}
module.exports = Add;
Теперь в нашем главном файле мы создаем новый экземпляр, используя Новый Ключевое слово и доступ Результат способ получить наше расчетное значение.
//---- Main file[main.js] ----
const add = require('./calculate')
const result = new add(2,5)
console.log(result.result()); //Output : 7
Как импортировать сердечник узла (родной) Модули
Вместо того, чтобы создавать наши собственные пользовательские модули каждый раз, узел предоставляет набор модулей для облегчения нашей жизни.
Мы собираемся обсудить некоторые модули, но вы можете найти весь список в официальном документе API узла здесь Отказ
Модули для импорта узлов аналогичны, как их импортируете свои собственные модули. Вы используете то же самое требовать () Функция для доступа к нему в вашем собственном файле.
Но есть некоторые модули, которые вы, возможно, использовали неосознанно, которые не нужно импортировать. Например console.log () – Мы использовали Консоль Модуль много раз, не выбирая его в нашем собственном локальном файле, так как эти методы доступны Глобально Отказ
Давайте посмотрим на один из основных родных модулей, который является Файловая система ( FS ). Существует n Количество операций, которые мы можем выполнить с помощью модуля файловой системы, такой как чтение файла, запись файла и обновление его, чтобы назвать несколько.
Мы собираемся использовать ФС Модуль для чтения файла. Даже в этом методе есть два способа выполнения этого действия: один с помощью синхронной функции fs.readfilesync () и другой асинхронной функцией Fs.readfile () Отказ
Мы обсудим синхронные функции асинхронного узла в будущих сообщениях.
Сегодня мы будем использовать асинхронную версию, то есть Fs.readfile () Отказ
Для этого примера мы создали два файла: main.js , где мы собираемся выполнить операцию чтения файлов, а file.txt Какой файл, который мы собираемся прочитать.
file.txt содержит какой-нибудь текст в нем.
Hello World!
Теперь мы используем ФС Модуль, чтобы прочитать файл, не импортируя его, как показано ниже:
fs.readFile('./file.txt','utf-8',(err,data)=>{
if (err) throw err
console.log(data);
})Это бросит ошибку как ФС не определен. Это потому, что файловая система ФС Модуль недоступен глобально, как Консоль модуль есть.
ReferenceError: fs is not defined
at Object. (C:\Users\Sarvesh Kadam\Desktop\Training\blog\code snippets\Node Modular Pattern\main.js:3:1)
at Module._compile (internal/modules/cjs/loader.js:1256:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1277:10)
at Module.load (internal/modules/cjs/loader.js:1105:32)
at Function.Module._load (internal/modules/cjs/loader.js:967:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
at internal/main/run_main_module.js:17:47
Поэтому нам необходимо импортировать все данные из модуля файловой системы, используя требовать () Функция и хранить все эти данные в переменной ФС Отказ
const fs = require('fs')
fs.readFile('./file.txt','utf-8',(err,data)=>{
if (err) throw err
console.log(data);
})Теперь вы можете назвать эту переменную что угодно. Я назвал это ФС Для чтения И это стандарт, который последует большинство разработчиков.
Используя ФС Переменная мы можем получить доступ к readfile () Метод, где мы прошли три аргумента эти аргументы – это путь к файлу, кодировка символов UTF-8 и функция обратного вызова, чтобы дать вывод.
Вы можете спросить, почему мы проезжаем UTF-8 Как наш аргумент в readfile () ?
Поскольку он кодирует значение и дает текст в качестве вывода, а не дает буфер, как показано ниже:
<Буфер 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 21
Функция обратного вызова, в свою очередь, имеет два аргумента: ошибка ( Err ) и фактический контент в файле ( Data ). Тогда мы распечатаем это данные в консоли.
//Output: Hello World!
Как импортировать NPM модули
Так что же именно узел пакета? Пакет – это кусок кода, который управляется менеджером пакета. Это не что иное, как программное обеспечение, которое управляет установкой и обновлением пакетов.
NPM согласно официальному Документация :
Итак, в NPM мы используем какой-то код с открытым исходным кодом, управляемый NPM, импортируя его в наш проект. NPM обычно поставляется с узлом JS, когда вы загружаете его. Вы можете проверить, установлен ли NPM на вашем компьютере, просто запустив команду NPM -В в вашей командной строке. Если он возвращает номер версии, это означает, что NPM успешно установлен.
NPM имеет свой реестр в npmjs.com Где вы можете обнаружить пакеты, которые вы можете использовать.
Давайте посмотрим на одну из пакетов под названием Мел который в основном используется для стилизации терминала.
В приведенном выше показателе мы можем увидеть еженедельные загрузки пакета, который предлагает, насколько это популярно. Также вы можете увидеть, что этот пакет имеет зависимости в нем. Таким образом, этот модуль, который будет служить зависимостью на нашем проекте, сам по себе зависит от других модулей. Весь весь процесс управления заботятся о управляющем пакета. Даже исходный код, который присутствует на GitHub, дан нам. Мы можем перейти к нему и проверить, есть ли какие-либо открытые проблемы. Еще одна вещь, прежде чем двигаться вперед: пакеты NPM входят в разные версии. Узор, который следует версию, является семантической версией. Как видите, последняя версия Мел Модуль, когда я написал эту статью 4.1.0.
Это следует за семантической версией Major_changes Отказ Minal_changes Отказ Патч шаблон.
Major_changes Как стенды имени, являются значительные изменения в модуле, которые могут повлиять на ваш существующий код. Minal_changes являются новыми улучшениями или функциями, а также добавленные исправления дефектов, которые не должны влиять на ваш существующий код. Патч Является ли небольшие исправления ошибок, которые не разбивают ваш существующий код.
Вы можете узнать больше о семантической версию на semver.org Отказ
Как установить NPM
Теперь, чтобы импортировать любой пакет из NPM, вам сначала необходимо инициализировать NPM в вашей локальной папке проекта, запустив команду в командной строке:
npm init
Как только вы запустите вышеуказанную команду, он попросит вас за некоторыми данными, как показано ниже, как имя пакета, версия и т. Д.
Большая часть этих данных может быть сохранена как по умолчанию, как указано в круглых скобках () . Также поля, такие как Автор и Лицензия Для людей, которые создали эти пакеты NPM.
С другой стороны, мы просто импортируем и используем их, чтобы создать наше собственное приложение.
package name: (code_npm) code_npm version: (1.0.0) 1.0.0 description: npm demo entry point: (index.js) index.js test command: test git repository: keywords: npm test author: Sarvesh license: (ISC)
Как только вы введете все поля, он создаст файл JSON со значениями, имеющими вышеуказанные свойства, и он попросит вас подтвердить, как это:
Is this OK? (yes) yes
После того, как вы подтвердили Да Это создаст package.json Файл со всеми введенными вами данными, как показано ниже:
{
"name": "code_npm",
"version": "1.0.0",
"description": "npm demo",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"npm",
"test"
],
"author": "Sarvesh",
"license": "ISC"
}
Кроме того, вы можете увидеть Сценарий объект, который имеет Тест недвижимость добавлена. Вы можете запустить его, используя NPM тест команда И это вернет желаемый вывод, как это:
"Error: no test specified"
Теперь вместо этого удлиненного метода инициализации NPM и ввода значений пользовательских свойств вы можете просто запустить команду:
npm init -y
После того, как вы запустите эту команду, это будет напрямую создать package.json Файл с значениями по умолчанию.
Теперь, чтобы установить последнюю версию Мел Пакет в вашем проекте, вам нужно выполнить команду:
npm install chalk
Вы также можете установить любую конкретную версию, которую вам нужен мел, просто добавив Номер @version как показано ниже. Также вместо Установить Вы можете просто поставить короткую руку Я Флаг, который означает установку:
npm i chalk@4.0.0
Это установит две вещи, а Node_Modules папка и а Package-lock.json файл.
Кроме того, он добавит новую недвижимость под названием зависимости нашему package.json Файл, который содержит имя установленного пакета и его версии.
"dependencies": {
"chalk": "^4.0.0"
}
Node_Module Папка содержит папку пакетов и папки его зависимости. Это становится изменено, как и когда пакет NPM устанавливается. Package-lock.json Содержит код, который делает NPM быстрее и безопаснее.
"chalk": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
"integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
Он в основном содержит свойства, такие как Версия , который является семантическим номером версии. разрешено Свойство является каталогом или местоположением, с которого был доставлен пакет. В этом случае он был привлечен из мелочи . Целостность Недвижимость – убедиться, что мы получим тот же код, если мы снова устанавливаем зависимость. требует Свойство объекта представляет собой зависимость от Мел упаковка.
Примечание : Не вносить никаких изменений в эти два файла Node_Modules и Package-lock.json.
Как использовать NPM
Теперь, как только мы установили мел на наш проект, мы можем импортировать его в наш файл root Project, используя требовать () метод. Тогда мы можем хранить этот модуль в переменной под названием Мел Отказ
const chalk = require('chalk')
console.log(chalk.red("Hello World"))Используя красный () Метод Мел Пакет, мы стилизовали текстовый цвет «Hello World» в красном.
При запуске команды Узел index.js Мы получаем следующий вывод:
Теперь существует много способов стилей вашим выходом командной строки с помощью пакета мела. Для получения дополнительной информации вы можете обратиться к Мел Официальный документ на НПМ.
Кроме того, вы можете установить пакеты NPM глобально (то есть в нашей операционной системе), а не устанавливая ее в локальный проект, добавив -G Флаг в командной строке (которая стоит за глобальным, как упоминалось ниже):
npm i nodemon -g
Этот глобальный пакет не повлияет на наши package.json Каким-либо образом, поскольку он не установлен локально.
Мы установили Номемон Пакет глобально используется для автоматического перезапуска приложения узла при изменении файлов в каталоге. Вы можете обратиться к Номемон для дополнительной информации.
Мы можем использовать пакет Nodemon, запустив приложение, используя эту команду:
nodemon index.js
Это работает аналогично Узел index.js , за исключением того, что он держит взгляд на изменения файла, и он перезапускается приложение после обнаружения изменений.
[nodemon] 2.0.6 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node index.js` Hello World
Примечание : Мел Стайлинг, вероятно, не будет работать, когда вы использовали узел .
Наконец, мы пройдем через Зависимости Dev Отказ Существуют некоторые пакеты или модули NPM, которые нам не понадобится в производственной среде нашего проекта, но только для наших требований к разработке.
Мы можем установить эти модули в нашем проекте, используя dev Флаг, как показано ниже:
npm i nodemon --save-dev
Затем это создает новую недвижимость в package.json называется Devdependonds :
"devDependencies": {
"nodemon": "^2.0.6"
}
Заключение
Используя модуль узла, мы можем импортировать из наших собственных файлов, экспортируя их в виде функций, объектов, конструкторов функций и классов ES6.
И узел имеет свой собственный набор основных (родных) модулей, которые мы можем использовать. Некоторые из них доступны по всему миру, в то время как некоторые из них необходимо импортировать локально в вашем проекте/папке.
NPM – это менеджер пакетов, который управляет третьим сторонним исходным кодом, который мы можем использовать в нашем проекте. Перед использованием NPM модулей нужно инициализировать NPM локально использовать NPM init В вашей командной строке в корне вашей папки проекта.
Вы можете установить любой пакет NPM с помощью команды NPM I <имя пакета> Отказ И вы можете установить пакет NPM глобально, используя -G флаг. Также можно сделать пакет в разработке зависит от --save-dev флаг.
Спасибо за чтение! Если вам нравится эта статья, добраться до меня на Twitter Когда я продолжаю документировать мое обучение.
Оригинал: “https://www.freecodecamp.org/news/modular-programming-nodejs-npm-modules/”