Node.js: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
 
(не показано 13 промежуточных версий 9 участников)
Строка 1: Строка 1:
{{Карточка программы
{{Карточка программы
| написана на = [[C++]], [[Си (язык программирования)|C]]
| [[Стадии разработки программного обеспечения|последняя версия]] = 18.3.0 (Current), 16.15.1 ([[LTS]])
| написана на = [[Lua]], [[C++]], [[Python]], [[Си (язык программирования)|C]]
| состояние = активное
| состояние = активное
}}
}}


'''Node''' или '''Node.js''' (читается: ''ноуд'' или ''ноуд-джи-эс'') — программная платформа, основанная на движке [[V8 (движок JavaScript)|V8]] (компилирующем [[JavaScript]] в [[машинный код]]), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами [[ввод-вывод|ввода-вывода]] через свой [[API]], написанный на [[C++]], подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль [[веб-сервер]]а, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи [[NW.js]], AppJS или [[Electron]] для [[Linux]], [[Windows]] и [[macOS]]) и даже программировать микроконтроллеры (например, tessel, low.js и [[Espruino]]). В основе Node.js лежит [[Событийно-ориентированное программирование|событийно-ориентированное]] и [[Реактивное программирование|асинхронное (или реактивное)]] программирование с [[Неблокирующая синхронизация|неблокирующим вводом/выводом]].
'''Node''' или '''Node.js''' (читается: ''ноуд'' или ''ноуд--эс'') — программная платформа, основанная на движке [[V8 (движок JavaScript)|V8]] (компилирующем [[JavaScript]] в [[машинный код]]), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами [[ввод-вывод|ввода-вывода]] через свой [[API]], написанный на [[C++]], подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль [[веб-сервер]]а, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи [[NW.js]], AppJS или [[Electron]] для [[Linux]], [[Windows]] и [[macOS]]) и даже программировать микроконтроллеры (например, tessel, low.js и [[Espruino]]). В основе Node.js лежит [[Событийно-ориентированное программирование|событийно-ориентированное]] и [[Реактивное программирование|асинхронное (или реактивное)]] программирование с [[Неблокирующая синхронизация|неблокирующим вводом/выводом]].


== История ==
== История ==
Строка 104: Строка 103:
|2020-06-01
|2020-06-01
|-
|-
|{{Version|co|14.x|show=}}
|{{Version||14.x|show=}}
|{{Version|co|Maintenance LTS|show=}}
|{{Version|||show=}}
|[[Фермий|Fermium]]<ref name="Release" />
|[[Фермий|Fermium]]<ref name="Release" />
|2020-04-21
|2020-04-21
Строка 116: Строка 115:
|2021-06-01
|2021-06-01
|-
|-
|{{Version|co|16.x}}
|{{Version||16.x}}
|{{Version|co|Maintenance LTS}}
|{{Version||}}
|[[Галлий|Gallium]]<ref name="Release16eol">{{Cite web |url=https://nodejs.org/en/blog/announcements/nodejs16-eol |title=Bringing forward the End-of-Life Date for Node.js 16 |access-date=2023-11-03 |deadlink=no |archive-date=2023-11-03 |archive-url=https://web.archive.org/web/20231103093116/https://nodejs.org/en/blog/announcements/nodejs16-eol |url-status=live }}</ref>
|[[Галлий|Gallium]]<ref name="Release" />
|2021-04-20
|2021-04-20
|2024-04-30
|--
|-
|-
|{{Version|o|17.x}}
|{{Version|o|17.x}}
Строка 128: Строка 127:
|2022-06-01
|2022-06-01
|-
|-
|{{Version|c|18.x}}
|{{Version||18.x}}
|{{Version|c|Current LTS}}
|{{Version|| LTS}}
|[[Водород|Hydrogen]]<ref name="ReleaseNames">{{Cite web |url=https://github.com/nodejs/Release/blob/main/CODENAMES.md |title=Release codenames |access-date=2023-04-27 |archive-date=2023-04-27 |archive-url=https://web.archive.org/web/20230427093452/https://github.com/nodejs/Release/blob/main/CODENAMES.md |deadlink=no }}</ref>
|[[Водород|Hydrogen]]<ref name="ReleaseNames">{{Cite web |url=https://github.com/nodejs/Release/blob/main/CODENAMES.md |title=Release codenames |access-date=2023-04-27 |archive-date=2023-04-27 |archive-url=https://web.archive.org/web/20230427093452/https://github.com/nodejs/Release/blob/main/CODENAMES.md |deadlink=no }}</ref>
|2022-04-19
|2022-04-19
|2025-04-30
|2025-04-30
|-
|-
| {{Version|co|19.x}}
| {{Version||19.x}}
| {{Version|co|Maintenance}}
| {{Version||}}
|
|
| 2022-10-18
| 2022-10-18
Строка 141: Строка 140:
|-
|-
| {{Version|c|20.x}}
| {{Version|c|20.x}}
| {{Version|c|Current}}
| {{Version|c|}}
| [[Железо|Iron]]<ref name="ReleaseNames" />
| [[Железо|Iron]]<ref name="ReleaseNames" />
| 2023-04-18
| 2023-04-18
| 2026-04-30
| 2026-04-30
|-
|-
| {{Version|p|21.x}}
| {{Version||21.x}}
| {{Version|p|Planned}}
| {{Version||}}
|
|
| 2023-10-17
| 2023-10-17
Строка 163: Строка 162:
| 2024-10-14
| 2024-10-14
| 2025-05-27
| 2025-05-27
|-
| {{Version|p|24.x}}
| {{Version|p|Planned}}
|
| 2025-04-22
| 2028-04-30
|-
|-
| colspan="5" |<small>{{Version|l|show=111101}}</small>
| colspan="5" |<small>{{Version|l|show=111101}}</small>
Строка 211: Строка 216:
== Пакеты сторонних разработчиков ==
== Пакеты сторонних разработчиков ==
В состав Node.js входит собственный менеджер пакетов [[NPM|npm]], который предоставляет возможности установки, публикации и поиска пакетов из репозитория npmjs.com.
В состав Node.js входит собственный менеджер пакетов [[NPM|npm]], который предоставляет возможности установки, публикации и поиска пакетов из репозитория npmjs.com.
Все зависимости находятся в папке node_modules
Все зависимости находятся в папке node_modules


Чтобы их использовать сначала нужно инициализировать node js проект
Чтобы их использовать сначала нужно инициализировать node js проект
<source lang="bash">
<source lang="bash">
npm init
npm init
</source>
</source>
Появятся файлы package.json и package-lock.json в которых будет информация о проекте и зависимостях
Появятся файлы package.json и package-lock.json в которых будет информация о проекте и зависимостях
Установка производится при помощи команды:
Установка производится при помощи команды:
<source lang="bash">
<source lang="bash">
Строка 228: Строка 233:
Этой же командой можно производить выборочный поиск пакетов.
Этой же командой можно производить выборочный поиск пакетов.


Также можно установить все необходимые зависимости из файла package.json
Также можно установить все необходимые зависимости из файла package.json
<source lang="bash">
<source lang="bash">
npm install
npm install

Текущая версия от 17:41, 28 марта 2024

Node.js
Логотип программы Node.js
Тип фреймворк приложения[вд], среда выполнения и открытое программное обеспечение
Разработчики OpenJS Foundation[вд] и Даль, Райан
Написана на C++, C, JavaScript
Операционные системы Linux, Windows[3], BSD[d][3] и macOS[3]
Первый выпуск 27 мая 2009[1]
Последняя версия
Репозиторий github.com/nodejs/node
Состояние активное
Лицензия лицензия MIT[4]
Сайт nodejs.org (англ.)
Логотип Викисклада Медиафайлы на Викискладе

Node или Node.js (читается: ноуд или ноуд-джей-эс) — программная платформа, основанная на движке V8 (компилирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API, написанный на C++, подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и macOS) и даже программировать микроконтроллеры (например, tessel, low.js и Espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом.

В 1996 году в компании Netscape были попытки создания серверного JavaScript (Server-side JavaScript — SSJS)[5][6], однако технология не получила распространения.

Райан Даль, создатель Node.js

Node.js разработал Райан Даль в 2009 году после двух лет экспериментирования над созданием серверных веб-компонентов. В ходе своих исследований он пришёл к выводу, что вместо традиционной модели параллелизма на основе потоков следует обратиться к событийно-ориентированным системам. Эта модель была выбрана из-за простоты, низких накладных расходов (по сравнению с идеологией «один поток на каждое соединение») и быстродействия. Целью Node является предложить «простой способ построения масштабируемых сетевых серверов».

Разработка Node.js спонсируется компанией Joyent.

В декабре 2014 года был создан форк io.js.

В мае 2015 года было принято решение о слиянии io.js и Node.js и дальнейшем развитии под эгидой Node.js Foundation[7].

8 сентября 2015 года вышел Node.js v4.0.0 как результат слияния Node.js v0.12.7 и io.js v3.3.0[8][9].

Важными событиями в развитии платформы стало появление Atomics и SharedArrayBuffer в Node.js 9, а также worker_threads в Node.js 10.5 (и существенное развитие в Node.js 12)[10]. Это позволило создавать многопоточные параллельные приложения, реализовывать примитивы параллельного программирования и работать с разделяемой памятью[11].

Версия Статус Кодовое имя Дата выпуска Поддержка до
Старая версия, не поддерживается: 0.10.x Старая версия, не поддерживается: End-of-Life 2013-03-11 2016-10-31
Старая версия, не поддерживается: 0.12.x Старая версия, не поддерживается: End-of-Life 2015-02-06 2016-12-31
Старая версия, не поддерживается: 4.x Старая версия, не поддерживается: End-of-Life Argon[12] 2015-09-08 2018-04-30
Старая версия, не поддерживается: 5.x Старая версия, не поддерживается: End-of-Life 2015-10-29 2016-06-30
Старая версия, не поддерживается: 6.x Старая версия, не поддерживается: End-of-Life Boron[12] 2016-04-26 2019-04-30
Старая версия, не поддерживается: 7.x Старая версия, не поддерживается: End-of-Life 2016-10-25 2017-06-30
Старая версия, не поддерживается: 8.x Старая версия, не поддерживается: End-of-Life Carbon[12] 2017-05-30 2019-12-31
Старая версия, не поддерживается: 9.x Старая версия, не поддерживается: End-of-Life 2017-10-01 2018-06-30
Старая версия, не поддерживается: 10.x Старая версия, не поддерживается: End-of-Life Dubnium[12] 2018-04-24 2021-04-30
Старая версия, не поддерживается: 11.x Старая версия, не поддерживается: End-of-Life 2018-10-23 2019-06-01
Старая версия, не поддерживается: 12.x Старая версия, не поддерживается: End-of-Life Erbium[12] 2019-04-23 2022-04-30
Старая версия, не поддерживается: 13.x Старая версия, не поддерживается: End-of-Life 2019-10-22 2020-06-01
Старая версия, не поддерживается: 14.x Старая версия, не поддерживается: End-of-Life Fermium[12] 2020-04-21 2023-04-30
Старая версия, не поддерживается: 15.x Старая версия, не поддерживается: End of Life 2020-10-20 2021-06-01
Старая версия, не поддерживается: 16.x Старая версия, не поддерживается: End-of-Life Gallium[13] 2021-04-20 2023-09-11
Старая версия, не поддерживается: 17.x Старая версия, не поддерживается: End-of-Life 2021-10-19 2022-06-01
Старая поддерживаемая версия: 18.x Старая поддерживаемая версия: Maintenance LTS Hydrogen[14] 2022-04-19 2025-04-30
Старая версия, не поддерживается: 19.x Старая версия, не поддерживается: End-of-Life 2022-10-18 2023-06-01
Текущая версия: 20.x Текущая версия: Active LTS Iron[14] 2023-04-18 2026-04-30
Текущая версия: 21.x Текущая версия: Current 2023-10-17 2024-05-30
Будущая версия: 22.x Будущая версия: Planned Jod[14] 2024-04-15 2027-04-28
Будущая версия: 23.x Будущая версия: Planned 2024-10-14 2025-05-27
Будущая версия: 24.x Будущая версия: Planned 2025-04-22 2028-04-30
Легенда:
Старая версия, не поддерживается
Старая поддерживаемая версия
Текущая версия
Тестовая версия
Будущая версия

Примеры кода

[править | править код]

Создание и запуск HTTP-сервера на Node.js, выдающего Hello, world!:

// Подключение модуля http
const http = require("http");

// Создаем веб-сервер с обработчиком запросов
const server = http.createServer((incomingMessage, response) => {
  console.log("Начало обработки запроса");
  // Передаем код ответа и заголовки http
  response.writeHead(200, { "Content-Type": "text/plain; charset=UTF-8" });
  response.end("Hello, world!");
});

// Запускаем веб-сервер
server.listen(80, "127.0.0.1", () => {
  const info = server.address();
  console.log(`Сервер запущен ${info}`);
});

Другой пример скрипта, создающего TCP-сервер, который прослушивает порт 8080 и выводит на экран всё, что вводит пользователь:

// Подключение модуля net
const net = require("net");

// Создание TCP-сервера
const server = net.createServer((stream) => {
  // Установка кодировки
  stream.setEncoding("utf-8");
  // Объявление обработчика событий
  stream.on("data", (data) => {
    // Вывод данных в консоль
    console.log(data);
  });
});

// Запуск сервера
server.listen(8080, "127.0.0.1");

Пакеты сторонних разработчиков

[править | править код]

В состав Node.js входит собственный менеджер пакетов npm, который предоставляет возможности установки, публикации и поиска пакетов из репозитория npmjs.com. Все зависимости находятся в папке node_modules.

Чтобы их использовать, сначала нужно инициализировать node js проект:

npm init

Появятся файлы package.json и package-lock.json, в которых будет информация о проекте и зависимостях Установка производится при помощи команды:

npm install <packagename>

Все доступные для установки пакеты и их краткое описание:

npm search

Этой же командой можно производить выборочный поиск пакетов.

Также можно установить все необходимые зависимости из файла package.json:

npm install

Список библиотек, реализующих концепцию событийно-ориентированного программирования:

  • Twisted — на языке Python
  • EventMachine — на языке Ruby
  • Secure Scuttlebutt — протокол одноранговых сетей и социальная сеть с ячеистой топологией, написанный на JavaScript с применением Node.js

Примечания

[править | править код]
  1. node-v0.x-archive on GitHub
  2. Release 22.0.0 — 2024.
  3. 1 2 3 Free Software Directory
  4. node/LICENSE at master · nodejs/node · GitHub
  5. Server-Side JavaScript — Archive of obsolete content | MDN. Дата обращения: 4 июня 2016. Архивировано из оригинала 22 ноября 2018 года.
  6. Серверный JavaScript 1.4. Руководство по Использованию. Дата обращения: 4 июня 2016. Архивировано 25 июня 2016 года.
  7. io.js объединяется с NodeJS. Дата обращения: 10 сентября 2015. Архивировано 5 сентября 2015 года.
  8. Node.js + Io.js = Node.js 4.0.0. Дата обращения: 10 сентября 2015. Архивировано 10 сентября 2015 года.
  9. Вышла в свет новая версия Node.js v4.0.0. Дата обращения: 10 сентября 2015. Архивировано 10 сентября 2015 года.
  10. Node.js: The Road to Workers by Anna Henningsen. Дата обращения: 7 сентября 2019. Архивировано 1 мая 2020 года.
  11. Тимур Шемсединов. Разделяемая память в многопоточном Node.js. JS Fest 2019 Spring. Дата обращения: 7 сентября 2019. Архивировано 11 ноября 2020 года.
  12. 1 2 3 4 5 6 nodejs/Release (англ.). GitHub. Дата обращения: 3 мая 2018. Архивировано 3 мая 2018 года.
  13. Bringing forward the End-of-Life Date for Node.js 16. Дата обращения: 3 ноября 2023. Архивировано 3 ноября 2023 года.
  14. 1 2 3 Release codenames. Дата обращения: 27 апреля 2023. Архивировано 27 апреля 2023 года.

Литература

[править | править код]
  • Брэд Дейли, Брендан Дейли, Калеб Дейли. Разработка веб-приложений с помощью Node.js, MongoDB и Angular: исчерпывающее руководство по использованию стека MEAN = Web Development with Node and Express. — 2-е изд.. — Санкт-Петербург: «Диалектика-Вильямс», 2020. — 656 с. — ISBN 978-5-6040044-8-7.
  • Итан Браун. Веб-разработка с применением Node и Express. Полноценное использование стека JavaScript = Web Development with Node and Express / Итан Браун. — Санкт-Петербург: Питер, 2017. — 336 с. — ISBN 978-1-491-94930-6.
  • Каскиаро М., Маммино Л. Шаблоны проектирования Node.js. — 2017. — С. 396. — ISBN 978-5-97060-485-4.
  • Сухов К. К. Node.js. Путеводитель по технологии. — «ДМК», 2015. — С. 416. — ISBN 978-5-97060-164-8.
  • Холмс С. Стек MEAN. Mongo, Express, Angular, Node. — СПб.: «Питер», 2017. — С. 496. — ISBN 978-5-496-02459-4.
  • Пауэрс Ш. Изучаем Node. Переходим на сторону сервера. — 2-е изд.. — СПб.: «Питер», 2017. — С. 304. — ISBN 978-5-496-02941-4.
  • Янг А., Мек Б., Кантелон М. Node.js в действии. — 2-е изд.. — СПб.: «Питер», 2018. — С. 432. — ISBN 978-5-496-03212-4.