Similar presentations:
Основы 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. Действия с пакетами
Для удаления пакета используется команда npmuninstall.
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() можно передавать
некоторый объект, который передается в
функцию обработчика события.
programming