Как проверить версию node js в консоли

Руководство по Node.js, часть 5: npm и npx

Сегодня, в пятой части перевода руководства по Node.js, мы завершим разбор возможностей npm, в частности, коснёмся таких вопросов, как выяснение установленных версий npm-пакетов, установка старых версий пакетов, обновление зависимостей, локальная и глобальная деинсталляция пакетов. Здесь же мы поговорим и об npx.

Выяснение версий установленных npm-пакетов

Для того чтобы узнать версии всех установленных в папке проекта npm-пакетов, включая их зависимости, выполните следующую команду:

В результате, например, может получиться следующее:

То же самое можно узнать и просмотрев файл package-lock.json проекта, но древовидную структуру, которую выводит вышеописанная команда, удобнее просматривать.

Для того чтобы получить подобный список пакетов, установленных глобально, можно воспользоваться следующей командой:

Вывести только сведения о локальных пакетах верхнего уровня (то есть, тех, которые вы устанавливали самостоятельно и которые перечислены в package.json ) можно так:

В результате, если, например, устанавливали вы только пакет cowsay, выведено будет следующее:

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

В результате её выполнения получится примерно следующее:

Эта команда подходит и для выяснения версий зависимостей установленных вами пакетов. При этом в качестве имени пакета, передаваемого ей, выступает имя пакета-зависимости, а вывод команды будет выглядеть следующим образом:

Запись о пакете-зависимости в этой структуре будет выделена.

Если вы хотите узнать о том, каков номер самой свежей версии некоего пакета, доступного в npm-репозитории, вам понадобится команда следующего вида:

В ответ она выдаёт номер версии пакета:

Установка старых версий npm-пакетов

Установка старой версии npm-пакета может понадобиться для решения проблем совместимости. Установить нужную версию пакета из npm можно, воспользовавшись следующей конструкцией:

В случае с используемым нами в качестве примера пакетом cowsay, команда npm install cowsay установит его самую свежую версию (1.3.1 на момент написания этого материала). Если же надо установить его версию 1.2.0, воспользуемся такой командой:

Указывать версии можно и устанавливая глобальные пакеты:

Если вам понадобится узнать о том, какие версии некоего пакета имеются в npm, сделать это можно с помощью такой конструкции:

Вот пример результата её работы:

Обновление зависимостей проекта до их самых свежих версий

Когда вы устанавливаете пакет командой вида npm install <packagename> , из репозитория загружается самая свежая из доступных версий и помещается в папку node_modules . При этом соответствующие записи добавляются в файлы package.json и package-lock.json , находящиеся в папке проекта.

Кроме того, устанавливая некий пакет, npm находит и устанавливает его зависимости.

Предположим, мы устанавливаем уже знакомый вам пакет cowsay, выполняя команду npm install cowsay . Пакет будет установлен в папку node_modules проекта, а в файл package.json попадёт следующая запись:

В package-lock.json так же будут внесены сведения об этом пакете. Вот его фрагмент:

Из этих двух файлов можно узнать, что мы установили cowsay версии 1.3.1, и то, что правило обновления пакета указано в виде ^1.3.1 . В четвёртой части этой серии материалов мы уже говорили о правилах семантического версионирования. Напомним, что такая запись означает, что npm может обновлять пакет при выходе его минорных и патч-версий.

Если, например, выходит новая минорная версия пакета и мы выполняем команду npm update , то обновляется установленная версия пакета и при этом сведения об установленном пакете обновляются в файле package-lock.json , а файл package.json остаётся неизменным.

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

Вот результаты выполнения этой команды для проекта, зависимости которого давно не обновлялись:

Анализ устаревших зависимостей проекта

Некоторые из доступных обновлений пакетов представляют собой их мажорные релизы, обновления до которых не произойдёт при выполнении команды npm update . Обновление до мажорных релизов этой командой не производится, так как они (по определению) могут содержать серьёзные изменения, не отличающиеся обратной совместимостью с предыдущими мажорными релизами, а npm стремится избавить разработчика от проблем, которые может вызвать использование подобных пакетов.

Для того чтобы обновиться до новых мажорных версий всех используемых пакетов, глобально установите пакет npm-check-updates :

Затем запустите утилиту, предоставляемую им:

Эта команда обновит файл package.json , внеся изменения в указания о подходящих версиях пакетов в разделы dependencies и devDependencies . Это позволит npm обновить пакеты, используемые в проекте, до новых мажорных версий после запуска команды npm update .

Если вы хотите установить самые свежие версии пакетов для только что только что загруженного проекта, в котором пока нет папки node_modules , то, вместо npm update , выполните команду npm install .

Локальная или глобальная деинсталляция пакетов

Для того чтобы деинсталлировать пакет, ранее установленный локально (с использованием команды install <package-name> ), выполните команду следующего вида:

Если пакет установлен глобально, то для его удаления нужно будет воспользоваться флагом -g (—global ). Например, подобная команда может выглядеть так:

При выполнении подобной команды текущая папка значения не имеет.

О выборе между глобальной и локальной установкой пакетов

Когда и почему пакеты лучше всего устанавливать глобально? Для того чтобы ответить на этот вопрос, вспомним о том, чем различаются локальная и глобальная установка пакетов:

  • Локальные пакеты устанавливаются в директорию, в которой выполняют команду вида npm install <package-name> . Такие пакеты размещаются в папке node_modules , находящейся в этой директории.
  • Глобальные пакеты устанавливаются в особую папку (в какую точно — зависит от конкретных настроек вашей системы) вне зависимости от того, где именно выполняют команду вида npm install -g <package-name> .

Итак, какой же способ установки пакетов лучше всего использовать?

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

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

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

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

Подобные пакеты можно устанавливать и локально, запуская предоставляемые ими утилиты командной строки с использованием npx, но некоторые пакеты, всё же, лучше устанавливать глобально. К таким пакетам, которые вам, вполне возможно, знакомы, можно отнести, например, следующие:

  • npm
  • create-react-app
  • vue-cli
  • grunt-cli
  • mocha
  • react-native-cli
  • gatsby-cli
  • forever
  • nodemon

О зависимостях проектов

Когда пакет следует рассматривать как обычную зависимость проекта, необходимую для обеспечения его функционирования, а когда — как зависимость разработки?

При установке пакета с помощью команды вида npm install <package-name> он устанавливается как обычная зависимость. Запись о таком пакете делается в разделе dependencies файла package.json (до выхода npm 5 такая запись делалась только при использовании флага —save , теперь использовать его для этого необязательно).

Использование флага —save-dev позволяет установить пакет как зависимость разработки. Запись о нём при этом делается в разделе devDependencies файла package.json .

Зависимости разработки — это пакеты, которые нужны в процессе разработки проекта, в ходе его обычного функционирования они не требуются. К таким пакетам относятся, например инструменты тестирования, Webpack, Babel.

Когда проект разворачивают, используя команду npm install в его папке, в которой имеется папка, содержащая файл package.json , это приведёт к установке всех зависимостей, так как npm предполагает, что подобная установка выполняется для целей работы над проектом.

Поэтому, если пакет требуется развернуть в продакшне, то, при его развёртывании, нужно использовать команду npm install —production . Благодаря флагу —production зависимости разработки устанавливаться не будут.

Утилита npx

Сейчас мы поговорим об одной весьма мощной команде, npx, которая появилась в npm 5.2. Одной из её возможностей является запуск исполняемых файлов, входящих в состав npm-пакетов. Мы уже рассматривали использование npx для запуска подобного файла из пакета cowsay. Теперь поговорим об этом подробнее.

▍Использование npx для упрощения запуска локальных команд

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

Применение команды вида npx commandname приводит к автоматическому поиску нужного файла в папке проекта node_modules . Это избавляет от необходимости знания точного пути к подобному файлу. Так же это делает ненужной глобальную установку пакета с обеспечением доступа к нему из любого места файловой системы благодаря использованию системной переменной PATH .

▍Выполнение утилит без необходимости их установки

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

  • Не требуется установка утилит.
  • Можно запускать разные версии одних и тех же утилит, указывая нужную версию с помощью конструкции @version .

Если же пакет cowsay не будет установлен глобально, подобная команда выдаст ошибку.

Утилита npx позволяет выполнять подобные команды без их установки. Выглядит это, в рамках нашего примера, так:

Такая команда сработает, но, хотя «говорящая» корова, по большому счёту, особой пользы не приносит, тот же самый подход можно использовать и для выполнения куда более полезных команд. Вот несколько примеров:

  • Существует инструмент командной строки, предназначенный для создания и запуска Vue-приложений. С использованием npx его можно вызвать так: npx vue create my-vue-app .
  • Для создания React-приложений можно пользоваться утилитой create-react-app . Её вызов через npx выглядит так: npx create-react-app my-react-app .

▍Запуск JavaScript-кода с использованием различных версий Node.js

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

Это позволяет отказаться от использования инструментов наподобие nvm или других менеджеров версий Node.js.

▍Запуск произвольных фрагментов кода, доступных по некоему адресу

Npx позволяет запускать не только код, опубликованный в npm. В частности, если у вас есть ссылка на некий фрагмент кода (скажем, опубликованного на GitHub gist), запустить его можно так:

Конечно, при выполнении подобного кода нельзя забывать о безопасности. Npx даёт в руки разработчика большие возможности, но они означают и большую ответственность.

▍Итоги

Сегодня мы поговорили о некоторых полезных механизмах npm и об использовании npx. На данном этапе у вас должно сложиться базовое понимание устройства npm и методов работы с этим пакетным менеджером. Если вы хотите более глубоко изучить npm — обратитесь к странице документации проекта и побольше экспериментируйте.

Что такое Node JS. Начало работы¶

Node.js представляет среду выполнения кода на JavaScript, которая построена на основе движка JavaScript Chrome V8, который позволяет транслировать вызовы на языке JavaScript в машинный код. Node.js прежде всего предназначен для создания серверных приложений на языке JavaScript. Хотя также существуют проекты по написанию десктопных приложений (Electron) и даже по созданию кода для микроконтроллеров. Но прежде всего мы говорим о Node.js, как о платформе для создания веб-приложений.

Node.js является открытым проектом, исходники которого можно посмотреть на github.com.

Установка¶

Для загрузки перейдет на официальный сайт https://nodejs.org/en/. На главной странице мы сразу увидим две возможные опции для загрузки: самая последняя версия NodeJS и LTS-версия.

Установка Node.js

Загрузим последнюю версию. В моем случае это версия 11.1.0. Для Windows установщик представляет файл с расширением msi . После запуска откроется программа установщика:

Установка Node.js

После успешной установки вы можем ввести в командной строке/терминале команду node -v , и нам отобразится текущая версия node.js:

Версии node.js для других операционных систем наряду с исходниками можно найти по адресу https://nodejs.org/en/download/

Инструменты разработки¶

Для разработки под Node JS достаточно простейшего текстового редактора, в частности, Notepad++. Также можно использовать более продвинутые редакторы типа Atom, Sublime, Visual Studio Code, либо среды разработки, которые поддерживают работу с Node.JS, например, Visual Studio или WebStorm.

После установки NodeJS нам становится доступным такой инструмент как REPL. REPL (Read Eval Print Loop) представляет возможность запуска выражений на языке JavaScript в командной строке или терминале.

Так, запустим командную строку (на Windows) или терминал (на OS X или Linux) и введем команду node . После ввода этой команды мы можем выполнять различные выражения на JavaScript:

Или используем какую-нибудь функцию JS:

Можно определять свои функции и затем их вызывать, например, возведение числа в квадрат:

Если мы введем что-то неправильно, то REPL укажет об ошибке:

Консоль

Выполнение файла¶

Вместо того чтобы вводить весь код напрямую в консоль, удобнее вынести его во внешний файл. Например, создадим на жестком диске новый каталог, допустим, C:\node\helloapp , в который поместим новый файл app.js со следующим кодом:

В командной строке перейдем с помощью команды cd к каталогу helloapp , а затем выполним команду:

Node.js. Утилиты npm и npx

Утилита npm — это менеджер пакетов, который входит в состав Node.js. Пакетом называется один или несколько js-файлов, представляющих собой какую-то библиотеку или инструмент. Менеджер пакетов предназначен для скачивания пакетов из облачного сервера, либо для загрузки (публикации) пакетов на этот сервер.

1. Инициализация проекта

Для создания нового проекта нужно создать директорию проекта, перейти в нее и выполнить команду

В процессе инициализации, npm задаст несколько вопросов на тему того как должен называться проект, какая у него должна быть версия, описание и тому подобное. В конце npm спросит все ли правильно и покажет содержимое файла package.json , который и станет основой нового проекта.

2. Файл package-lock.json

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

3. Установленные пакеты

Получить список всех установленных в директории проекта npm-пакетов можно с помощью команды

Дополнительная опция —all команды list выводит все пакеты в виде дерева

Получить список всех установленных глобально npm-пакетов (см.ниже) можно с помощью команды

4. Подробная информация о пакете

Посмотреть подробную информацию о пакете, доступного через npm-репозиторий

Получить информацию из npm-репозитория о последней доступной версии пакета

5. Локальная установка пакетов

Установить все пакеты из секций dependencies и devDependencies файла package.json :

Установить все пакеты из секции dependencies файла package.json (для production сервера)

Установить пакет package-name , но не добавлять его в файл package.json :

Установить пакет package-name и добавить в секцию devDependencies файла package.json :

Установить пакет package-name и добавить в секцию dependencies файла package.json :

6. Локальное удаление пакетов

Удалить пакет package-name , но не удалять его из файла package.json :

Удалить пакет package-name и удалить его из секции devDependencies файла package.json :

Удалить пакет package-name и удалить его из секции dependencies файла package.json :

7. Глобальная установка пакета

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

8. Глобальное удаление пакета

Так что если из-за глобально установки пакета возникли трудности — можно удалить его с помощью команды

9. Локальное обновление пакетов

Обновить один пакет или все пакеты проекта (нужно выполнять из директории проекта):

Чтобы узнать, вышли ли новые версии используемых в проекте пакетов

10. Как безопасно обновляться

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

Для того, чтобы обновиться до новых мажорных версий всех используемых пакетов, нужно глобально установить пакет

Теперь можно посмотреть, какие пакеты можно обновить (без внесения каких-либо изменений):

  • Red = major upgrade
  • Cyan = minor upgrade
  • Green = patch upgrade

Убедившись, что обновление достаточно безопасно, можно выполнять следующую команду:

Эта команда обновит файл package.json , внеся изменения в указания о подходящих версиях пакетов в разделы dependencies и devDependencies . Это позволит npm обновить пакеты, используемые в проекте, до новых мажорных версий при запуске команды npm update .

Если нужно установить самые свежие версии пакетов для только что только что загруженного проекта, в котором пока нет директории node_modules , то, вместо npm update , выполняем команду npm install .

11. Глобальное обновление пакетов

Обновить один пакет или все пакеты, установленные глобально (можно выполнять из любого места):

12. Установка конкретной версии

Установка старой версии npm-пакета может понадобиться для решения проблем совместимости:

Узнать, какие версии некоего пакета имеются в npm-репозитории

13. Запуск скриптов

Файл package.json часто содержит секцию scripts , которая содержит скрипты для автоматизации рутиных задач. Можно запустить или остановить веб-сервер, собрать приложение, прогнать тесты и так далее.

Запускать эти команды можно с помощью команды

К переменной окружения PATH будет добавлен путь node_modules/.bin , так что в первую очередь будут выполнены локальные скрипты проекта.

14. Справка по менеджеру пакетов

У менеджера пакетов есть подробная справка по все командам

Для примера, посмотрим справку по команде install (в браузере)

Утилита npx

Существует множество утилит в виде пакетов (например, create-react-app ), которые изначально предполагалось устанавливать глобально. Запускать их из командной строки было очень просто — достаточно ввести имя утилиты в консоли. Однако мы уже знаем, что глобальная установка пакетов создает множество проблем.

Конечно, мы можем что-нибудь придумать, чтобы избежать проблем с глобальной установкой таких утилит. Например, установить пакет create-react-app глобально, запустить один раз из директории проекта, чтобы создать React-приложение — и сразу после этого удалить.

Еще один способ — установить create-react-app локально в какую-то временную директорию. И добавить команду в секцию scripts файла package.json . После этого можно запускать утилиту из этой директории с помощью npm run , указывая путь к директории проекта, который надо создать.

В общем, получается сложно и хлопотно — тут на помощь приходит утилита npx , которая позволяет:

  • во-первых, легко запустить локально установленный пакет без run-script
  • во-вторых, легко запустить пакет, который не установлен ни локально, ни глобально
  • в-третьих, запускать разные версии одной утилиты с помощью package@version

Посмотрим на то, как использовать команду npx на примере простой утилиты cowsay . Это абсолютно бессмысленная утилита, которая выводит на экран «говорящую» корову — но подходит в качестве примера. Если пакет cowsay установлен глобально, выполнение в командной строке команды cowsay hello приведёт к выводу в консоль «говорящей» коровы.

Если пакет cowsay не установлен глобально, подобная команда выдаст ошибку:

Используем команду npx , когда пакет cowsay не установлен глобально:

Утилита npx скачает пакет cowsay из npm-репозитория, установит во временную директорию и выполнит утилиту. Что важно — не загрязняя глобальное пространство. Так что при использовании npx необходимости в глобальной установке пакетов больше нет.

Если запускать npx из директории проекта, то сначала будет выполнен поиск в node_modules/.bin . Если пакет уже установлен локально — он будет выполнен. А если не установлен — npx найдет его в npm-репозитории, скачает, установит во временную директорию и выполнит.

Несколько раз встречал команду npm it и никак не мог понять, что она означает. Оказывается, это синоним команды npm install-test , которая выполняет последовательно две команды:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *