Основы Node.js
Содержание
Модули
Объект global
Параметры приложения
Пакетный менеджер npm
Установка пакетов
Действия с пакетами
Конфигурация проекта
Секции файла package.json
Секции файла package.json
Семантическое версионирование
Nodemon
Работа с файловой системой
Асинхронные операции
Работа с каталогами
События
Генерация события
Запуск и обработка события
Передача параметров событию
371.45K
Category: programmingprogramming

Основы Node.js

1. Основы Node.js

2. Содержание

1. Модули
2. Объект global
3. Параметры приложения
4. Npm
5. Конфигурация проекта
6. Работа с файловой системой
7. События

3. Модули

4.

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

5.

По умолчанию Node.js применяет систему
модулей CommonJS, которая рассматривает
отдельный файл как модуль.
CommonJS – это проект по стандартизации
экосистемы модулей на JavaScript за пределами
веб-браузера.
Спецификация проекта, в основном, используется
в Node.js
Другая спецификация модулей описана в
ECMAScript.

6.

Используются 2 способа подключения модулей:
1. Операция require();
2. Операция import()
require() — синхронная операция, блокирующая
выполнение скрипта до тех пор, пока модуль не
будет загружен и готов к использованию.
import() — асинхронная операция, не
блокирующая скрипт во время загрузки модуля.
Основное различие – require импортирует модуль
полностью, а import можно использовать для
импорта как модулей, так и индивидуальных
экспортов из модулей.

7.

Для экспорта модулей так же используется 2
операции:
1. Операция module.exports;
2. Операция exports;
Объект module.exports - это то, что возвращает
функция require() при получении модуля.
Exports выполняет тот же функционал. Обычно
используется в паре с import.

8.

9.

10.

В спецификации CommonJS описывается
использование именно require() для импорта, и
module.exports для экспорта.
В спецификации ECMAScript описывается
использование import() и exports соответственно.

11. Объект global

12.

Node.js предоставляет специальный объект
global, который открывает доступ к глобальным,
то есть доступным из каждого модуля
приложения, переменным и функциям.
Примерным аналогом данного объекта в
JavaScript для браузера является объект window.

13.

14. Параметры приложения

15.

При запуске приложения из
терминала/командной строки можно передавать
ему параметры.
Для получения параметров в коде приложения
применяется массив process.argv.
Первый элемент этого массива всегда указывает
на путь к файлу node.exe, который вызывает
приложение.
Второй элемент массив всегда указывает на путь к
файлу приложения, который выполняется.

16.

17. Пакетный менеджер npm

18.

Кроме встроенных и кастомных модулей Node.js,
существует огромный пласт различных библиотек
и фреймворков, разнообразных утилит, которые
создаются сторонними разработчиками и их
можно использовать в проекте.
И они тоже доступны в рамках Node.js.
Чтобы удобнее было работать со всеми
сторонними решениями, они распространяются в
виде пакетов.
Пакет представляет собой набор
функциональности.

19.

Для автоматизации установки и обновления
пакетов, как правило, применяется система
управления пакетами или менеджеры.
Непосредственно в Node.js для этой цели
используется пакетный менеджер NPM (Node
Package Manager).
NPM по умолчанию устанавливается вместе с
Node.js, поэтому ничего доустанавливать не
требуется.

20. Установка пакетов

Для установки пакета через npm применяется
команда npm install, после которой указываются
пакеты.
npm install имя_пакета1 имя_пакета2
После установки библиотеки в папке проекта
появится подпапка node_modules, в которой будут
хранится все установленные внешние модули.

21. Действия с пакетами

Для удаления пакета используется команда npm
uninstall.
npm uninstall пакет1 пакет2
С помощью команды npm info [пакет]
можно получить информацию об определенном
пакете.

22.

23. Конфигурация проекта

24.

Для более удобного управления конфигурацией и
пакетами приложения в npm применяется файл
конфигурации package.json.
npm автоматически создает этот файл (если его
нет) при установке пакета. Также при
инициализации проекта.
Если добавляется новый пакет или удаляется
ранее установленный пакет, то npm
соответствующим образом обновляет файл
package.json.

25.

Также в проекте создан еще один файл - packagelock.json.
Этот файл автоматически генерируется при любых
операциях, в которых npm изменяет файл
package.json и структуру каталогов/файлов в
каталоге node_modules.
Данный файл упрощает npm управление
пакетами.

26. Секции файла package.json

name: имя проекта. Оно может быть
произвольным.
version: версия проекта. По умолчанию 1.0.0
description: описание пакета
main: главный файл, с которого начинается
выполнение
keywords: массив ключевых слов. Эти ключевые
слова могут использоваться при поиске по
репозиторию npm.
homepage: адрес домашней страницы проекта

27. Секции файла package.json

license: лицензия пакета
author: автор пакета. Если авторов несколько, то
указывается главный. Сведения об авторе
включают имя. Также дополнительно можно
указать email и адрес домашней страницы в сети.
contributors: массив, который содержит
дополнительных авторов (если их несколько).
repository: репозиторий исходного кода проекта
dependencies: список зависимостей - других
пакетов, которые используются в приложении

28. Семантическое версионирование

При определении версии пакета применяется
семантическое версионирование.
Номер версии, как правило, задается в следующем
формате "major.minor.patch".
Если в приложении или пакете обнаружен какой-то
баг и он исправляется, то увеличивается на единицу
число "patch".
Если в пакет добавляется какая-то новая
функциональность, которая совместима с
предыдущей версией пакета, то это небольшое
изменение, и увеличивается число "minor".
Если же в пакет вносятся какие-то большие
изменения, которые несовместимы с предыдущей
версией, то увеличивается число "major".

29.

NPM позволяет определять в файле package.json
команды, которые выполняют определенные
действия.

30. Nodemon

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

31. Работа с файловой системой

32.

Для работы с файлами в Node.js предназначен
встроенный модуль fs.
Для работы с файловой системой модуль fs
использует 2 вида операций:
1. Синхронные
2. Асинхронные

33. Асинхронные операции

Для асинхронного чтения файла применяется
функция fs.readFile:
fs.readFile(path[, options],
callback)
Функция принимает до трех параметров:
1. Path – путь к файлу
2. Options - необязательный параметр, который
представляет дополнительные параметры
считывания, в частности, кодировку
3. Callback – функция обратного вызова.
Выполняется после завершения чтения данных
из файла. Принимает 2 аргумента – error и
data

34.

35.

Для асинхронной записи файла применяется
функция fs.writeFile(), которая принимает 4
параметра:
fs.writeFile(file, data[, options],
callback)
• file: путь к файлу
• data: записываемые данные
• options: дополнительный конфигурационный
объект, который определяет следующие
свойства:
• encoding: кодировка, которая используется при
записи. Значение по умолчанию - "utf8"
• mode: Режим записи в виде числа. Значение по
умолчанию - 0o666

36.

37.

Стоит отметить, что данные метод полностью
перезаписывает файл. При записи новых данных
старые удаляются.
Для решения такой проблемы предназначен
метод fs.appendFile()
Данный метод принимает те же параметры.
Также можно установить в параметрах записи
флаг ‘a’.

38.

Для получения информации о файле,
используется метод stat()
fs.stat(path[, options], callback)
Первый параметр представляет путь к файлу.
Второй, необязательный параметр, представляет
объект, у которого свойство bigint хранит
логическое значение и указывает, надо ли
возвратить данные в виде числа (при значении
true).
Третий параметр - функция обратного вызова

39.

40.

Для удаления файла используется функция
unlink()
fs.unlink(path, callback(error));

41. Работа с каталогами

Для создания каталога применяется функции
mkdir()
В качестве параметра она принимает название
каталога.
В качестве второго параметра принимает
функцию обратного вызова, которая срабатывает
при создании каталога.
Для считывания файлов из каталога применются
функции readdir()
Для удаления каталога применяются функции
rmdir()

42. События

43.

Множество функционала Node.js применяет
асинхронную событийную архитектуру, где
различные действия выполняются в ответ на
возникшие события.
В подобной архитектуре сначала специальные
объекты, которые называются эмиттерами
событий (event emitter), генерируют события.
Затем специальные функции - обработчики или
слушатели событий обрабатывают возникшее
событие.

44. Генерация события

Для генерации события необходимо создать
эммитер событий.
Эмиттер событий представляет объекты типа
EventEmitter

45.

EventEmitter предоставляет ряд методов для
управления обработчиками событий:
• on (eventName, listener): псевдоним метода on().
Регистрирует новый слушатель listener для
события eventName.
• addListener(eventName, listener): псевдоним
метода on(). Регистрирует новый слушатель
listener для события eventName.
• emit(eventName [, args]): запускает событие. В
качестве обязательного параметра принимает
имя события. Также дополнительно можно
передать необязательный параметр - аргументы
для обработчика события

46.

• eventNames(): возвращает массив с именами
событий, для которых зарегистрированы
слушатели
• getMaxListeners(): возвращает максимальное
количество слушателей для данного эмиттера
событий.
• listenerCount(eventName): возвращает
количество слушателей события eventName
• listeners(eventName): возвращает массив со
слушателями события eventName.

47.

• once(eventName, listener): регистрирует новый
слушатель listener для события eventName, но
выполняет его не более одного раза.
• prependListener(eventName, listener):
регистрирует новый слушатель listener для
события eventName и помещает его в начало
массива слушателей события eventName.
• prependOnceListener(eventName, listener):
аналогичен prependListener() за тем
исключением, что слушатель listener вызывается
не более одного раза.

48.

• removeAllListeners([eventName]): удаляет всех
слушателей события eventName
• removeListener(eventName, listener): удаляет
слушателя listener для события eventName.
• setMaxListeners (п): устанавливает максимальное
количество слушателей событий, которые
можно зарегистрировать для каждого события в
эмиттере событий

49. Запуск и обработка события

Для генерации события у EventEmitter,
необходимо вызвать метод emit(), в который
передается имя события.

50.

Для регистрации обработчика события
применяется метод on(), в который передается
имя события и функция обработчика.

51. Передача параметров событию

При вызове события в качестве второго
параметра в метод emit() можно передавать
некоторый объект, который передается в
функцию обработчика события.
English     Русский Rules