Руководство по node.js, часть 4: npm, файлы package.json и package-lock.json

Status: Deprecated

This article is deprecated and no longer maintained.

See Instead

This article may still be useful as a reference, but may not follow best practices or work on this or other Ubuntu releases. We strongly recommend using a recent article written for the version of Ubuntu you are using.

How To Install Node.js on Ubuntu 16.04

If you are currently operating a server running Ubuntu 12.04, we highly recommend upgrading or migrating to a supported version of Ubuntu:

  • How to upgrade from Ubuntu 12.04 to Ubuntu 14.04.
  • How to upgrade from Ubuntu 14.04 to Ubuntu 16.04
  • How to migrate server data to a supported version

Шаг 2 — Установка NVM (по желанию)

В Node.js есть менеджер версий (NVM), то есть вы можете установить несколько версий Node.js и легко ими управлять. Для установки NVM вам вначале нужно установить пакет:

sudo apt-get install build-essential libssl-dev -y

После этого можно устанавливать NVM:

curl https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash

v0.32.1 — это версия NVM, проверить свежую версию можно здесь

Вы получите сообщение подобное следующему:

=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="/root/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # Это запускает nvm

Теперь вы можете вновь открыть ваш терминал или запустить упомянутые команды, используя NVM. Чтобы убедиться в том, что NVM установлен верно наберите:

nvm --version

Если вы получите номер версии, это означает, что NVM установлен корректно. Теперь можно использовать NVM для проверки всех доступных версий Node.js:

nvm ls-remote

Результат выполнения команды:

             ......
             v6.6.0
             v6.7.0
             v6.8.0
             v6.8.1
             v6.9.0   (LTS: Boron)
             v6.9.1   (Latest LTS: Boron)
             v7.0.0
             v7.1.0

Для установки версии v7.1.0 Node.js просто запустите:

nvm install v7.1.0

Для использования только что установленной версии Node.js запустите:

nvm use v7.1.0

Используя тот же метод вы теперь можете устанавливать и управлять несколькими другими версиями Node.js точно также. Вы можете проверить установленную локально версию при помощи следующей команды:

nvm ls

Результат выполнения команды:

->         v6.9.1
           v7.1.0
           system
default -> v7.1.0
node -> stable (-> v7.1.0) (default)
stable -> 7.1 (-> v7.1.0) (default)
lts/boron -> v6.9.1

Как видно, текущая версия по умолчанию v7.1.0, поэтому вместо набора nvm use v7.1.0 можно просто использовать:

nvm use default

Вы можете также поменять версию по умолчанию:

nvm alias default v6.9.1

MIT License

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the «Software»), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

Step 3 — Installing PM2

Next let’s install PM2, a process manager for Node.js applications. PM2 makes it possible to daemonize applications so that they will run in the background as a service.

Use to install the latest version of PM2 on your server:

The option tells to install the module globally, so that it’s available system-wide.

Let’s first use the command to run your application, , in the background:

This also adds your application to PM2’s process list, which is outputted every time you start an application:

As indicated above, PM2 automatically assigns an (based on the filename, without the extension) and a PM2 . PM2 also maintains other information, such as the of the process, its current status, and memory usage.

Applications that are running under PM2 will be restarted automatically if the application crashes or is killed, but we can take an additional step to get the application to launch on system startup using the subcommand. This subcommand generates and configures a startup script to launch PM2 and its managed processes on server boots:

The last line of the resulting output will include a command to run with superuser privileges in order to set PM2 to start on boot:

Run the command from the output, with your username in place of :

As an additional step, we can save the PM2 process list and corresponding environments:

You have now created a systemd unit that runs for your user on boot. This instance, in turn, runs .

Start the service with :

If at this point you encounter an error, you may need to reboot, which you can achieve with .

Check the status of the systemd unit:

For a detailed overview of systemd, please review Systemd Essentials: Working with Services, Units, and the Journal.

In addition to those we have covered, PM2 provides many subcommands that allow you to manage or look up information about your applications.

Stop an application with this command (specify the PM2 or ):

Restart an application:

List the applications currently managed by PM2:

Get information about a specific application using its :

The PM2 process monitor can be pulled up with the subcommand. This displays the application status, CPU, and memory usage:

Note that running without any arguments will also display a help page with example usage.

Now that your Node.js application is running and managed by PM2, let’s set up the reverse proxy.

Шаг 1 — Установка Node js

Давайте начнем с установки последней версии LTS Node.js с использованием архивов пакетов NodeSource .

Сначала установите NodeSource PPA, чтобы получить доступ к его содержимому. Убедитесь, что вы находитесь в своем домашнем каталоге, и используйте для получения сценария установки для архивов Node.js 8.x:

Вы можете проверить содержимое этого скрипта с помощью или предпочитаемого вами текстового редактора:

Когда вы закончите проверку скрипта, запустите его через :

PPA будет добавлен в вашу конфигурацию, и ваш локальный кэш пакетов будет обновлен автоматически. После запуска сценария установки из Nodesource вы можете установить Node js server side:

Чтобы проверить, какую версию Node.js вы установили после этих начальных шагов, введите:

Примечание. При установке из NodeSource PPA вызывается исполняемый файл Node.js , а не .

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

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

Чтобы некоторые пакеты работали (например, требующие компиляции кода из исходного кода), вам необходимо установить пакет:

Теперь у вас есть необходимые инструменты для работы с пакетами, которые требуют компиляции кода из исходного кода.

Установив среду выполнения Node.js, давайте перейдем к написанию приложения Node.js.

Команды npm¶

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

В данном случае мы получаем переданные при запуске приложению параметры.

И определим следующий файл :

Здесь добавлена секция , которая определяет две команды. Вообще команд может быть много в соответствии с целями и задачами разработчика.

Первая команда называется . Она по сути выполняет команду , которая выполняет код в файле

Вторая команда назвывается . Она также выполняет тот же файл, но при этом также передает ему два параметра.

Названия команд могут быть произвольными. Но здесь надо учитывать один момент. Есть условно говоря есть зарезервированные названия для команд, например, , , и ряд других. Их не очень много. И как раз первая команда из выше определенного файла называется . И для выполнения подобных команд в терминале/командной строке надо выполнить команду

Например, для запуска команды

Команды с остальными названия, как например, в вышеопределенном файле, запускаются так:

Например, последовательно выполним обе команды:

package.json¶

В npm файл используется для описания модулей, от которых зависимо ваше приложение, и содержит ряд метаданных о приложении. Рассмотрим на примере. Предположим, у вас есть проект, корневая директория которого называется . Перейдите в через командную строку и введите команду.

Вам будет предложено ввести некоторые данные, на основе которых Node.js npm сгенерирует файл . Структура файла:

  • — название приложения;
  • — версия;
  • — описание;
  • — главный файл приложения, который отвечает за его запуск (хорошей практикой считается давать название или );
  • — объект, описывающий команды, которые часто приходится выполнять в процессе разработки и упрощающий их использование;
  • — ссылка на Git репозиторий, где хранится проект;
  • — массив ключевых слов, по которым будет осуществляться поиск модуля на сайте npm (если он будет там опубликован);
  • — разработчик;
  • — лицензия, под которой будет распространяться приложение.

Пример, как может выглядеть .

package.json

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

Prerequisites

This guide assumes that you have the following:

  • An Ubuntu 20.04 server setup, as described in the initial server setup guide for Ubuntu 20.04. You should have a non-root user with sudo privileges and an active firewall.
  • A domain name pointed at your server’s public IP. This tutorial will use the domain name example.com throughout.
  • Nginx installed, as covered in How To Install Nginx on Ubuntu 20.04.
  • Nginx configured with SSL using Let’s Encrypt certificates. How To Secure Nginx with Let’s Encrypt on Ubuntu 20.04 will walk you through the process.

When you’ve completed the prerequisites, you will have a server serving your domain’s default placeholder page at .

Installing Node.js on a VPS

The install process couldn’t be easier. Once you’re logged into your VPS, run this command:

You’ll see some output fly by, and then nvm will be installed. You will see a line that says:

=> Close and reopen your terminal to start using NVM

It’s not actually necessary to log out, we just need to make sure that the changes nvm made to your path are actually reflected, so just do:

Alternatively, run the command suggested in the output of the script. Now type:

Should you see the error, it may be because git is not installed.

Go ahead and install git and rerun the script:

And you will be shown a list of all the available versions of node.js. You can always find out the latest stable release by heading to the node.js website, where it’s printed in the center of the page.

To install version 0.10.13 (the latest as of this writing) type:

If you type:

You will now see that node v0.10.13 is installed and active. If you had an older node app that only works with node v0.8.16, and wanted to downgrade, then you would input:

to install and switch to v0.8.16.

When you’re done and want to switch back to v0.10.13, you can do so with nvm’s use command:

Nvm is great and makes switching between node versions easy and convenient. However, there’s one caveat. If you type:

you will see something interesting. Nvm installs node.js inside your user’s home directory. This is fine for development, but if you want to actually host node applications, you don’t want to install the latest new version of node via nvm and discover that you’ve inadvertently caused your production node app (which can be incompatible with the latest node.js) to stop working. It’s best to install one copy of node globally so that other users can access it, and use nvm to switch between your development versions.

To do this, run the following command (entering your user’s password at the prompt):

The above command is a bit complicated, but all it’s doing is copying whatever version of node you have active via nvm into the /usr/local/ directory (where user installed global files should live on a linux VPS) and setting the permissions so that all users can access them.

To check that it works, become the root user and do another which command to make sure that node is now installed to /usr/local/bin:

You should see:

Step 1 — Installing Node.js

Let’s begin by installing the latest LTS release of Node.js, using the NodeSource package archives.

First, install the NodeSource PPA in order to get access to its contents. Make sure you’re in your home directory, and use to retrieve the installation script for the most recent LTS version of Node.js from its archives.

You can inspect the contents of this script with or your preferred text editor:

When you’re done inspecting the script, run it under :

The PPA will be added to your configuration and your local package cache will be updated automatically. After running the setup script from Nodesource, you can install the Node.js package:

To check which version of Node.js you have installed after these initial steps, type:

Note: When installing from the NodeSource PPA, the Node.js executable is called , rather than .

The package contains the binary as well as , a package manager for Node modules, so you don’t need to install separately.

uses a configuration file in your home directory to keep track of updates. It will be created the first time you run . Execute this command to verify that is installed and to create the configuration file:

In order for some packages to work (those that require compiling code from source, for example), you will need to install the package:

You now have the necessary tools to work with packages that require compiling code from source.

With the Node.js runtime installed, let’s move on to writing a Node.js application.

Step 4 — Setting Up Nginx as a Reverse Proxy Server

Your application is running and listening on , but you need to set up a way for your users to access it. We will set up the Nginx web server as a reverse proxy for this purpose.

In the prerequisite tutorial, you set up your Nginx configuration in the file. Open this file for editing:

Within the block, you should have an existing block. Replace the contents of that block with the following configuration. If your application is set to listen on a different port, update the highlighted portion to the correct port number:

/etc/nginx/sites-available/example.com

This configures the server to respond to requests at its root. Assuming our server is available at , accessing via a web browser would send the request to , listening on port at .

You can add additional blocks to the same server block to provide access to other applications on the same server. For example, if you were also running another Node.js application on port , you could add this location block to allow access to it via :

/etc/nginx/sites-available/example.com — Optional

Once you are done adding the location blocks for your applications, save the file and exit your editor.

Make sure you didn’t introduce any syntax errors by typing:

Restart Nginx:

Assuming that your Node.js application is running, and your application and Nginx configurations are correct, you should now be able to access your application via the Nginx reverse proxy. Try it out by accessing your server’s URL (its public IP address or domain name).

Установка стабильной версии дистрибутива из стандартных репозиториев

В стандартных репозиториях Ubuntu 18.04 есть версия Node.js, которую удобно использовать для обеспечения однородной среды выполнения сетевых приложений сразу на нескольких серверах. На момент написания этой статьи текущая версия в репозиториях — 8.10.0. Это не самая последняя версия, но она довольно стабильна и её будет достаточно для экспериментов с языком.

Для установки этой версии воспользуемся пакетным менеджером . Сначала обновим локальный индекс пакетов:

Теперь установим Node.js из репозиториев:

Если пакет из репозиториев удовлетворяет вашим потребностям, то на этом установка Node.js закончена. Однако в большинстве случаев вам также потребуется установить — менеджер пакетов для Node.js. Это можно сделать при помощи следующей команды:

Это позволит вам легко устанавливать модули и пакеты для Node.js.

Из-за конфликта с другим пакетом, исполняемый файл из репозиториев Ubuntu называется вместо . При работе имейте это ввиду.

Для проверки того, какую именно версию Node.js вы установили в процессе, описанном выше, выполните команду:

После того, как вы определили версию Node.js, установленную из репозиториев Ubuntu, вы можете решить, хотите ли вы работать с разными версиям, архивами пакетов или менеджерами версий. Далее мы рассмотрим эти вопросы вместе с процессом более гибкой установки.

Как использовать NVM

Есть несколько важных вещей которые нужно знать чтобы использовать NVM эффективно, ниже они будут описаны и будут приведены примеры как делать определенные задачи.

Установка разных версий Node.js

Менеджер версий делает установку разных версий Node.js очень простой с помощью одной команды. Просто запустите команду install и передайте ей параметром необходимую версию. Например, если вы хотите установить Node.js версии v6.5.0, выполните следующую команду:

Так как утилита следует SemVer, вы можете устанавливать патчи командой install с аргументом номера патча. Для получения списка доступных версий в Linux и OS X, выполните:

Если вы используете Windows, выполните следующую команду:

Если вам нужно удалить екземпляр Node, просто выполните nvm uninstall c нужным номером версии.

Глобальные npm пакеты

Стоит заметить то что глобально установленный npm пакеты не разделяются между разными версиями Node.js, потому что они могут причинить проблемы несовместимости. Поэтому, Node Version Manager одновременно устанавливает совместимую версию npm каждый раз когда вы устанавливаете какую то версию Node.js. Так как каждый экземпляр Node имеет собственную версию npm, вы можете запустить npm -v что-бы проверить какая версия сейчас используется. Также не нужно иметь sudo права при установке глобальных пакетов. Если вы хотите переустановить глобальные npm пакеты для определенной версии Node.js или при ее установке, сделайте так:

Команда выше устанавливает Node 6.5.0 и необходимую npm, потом переустанавливает все установленные пакеты в версии 4.2

Алиасы

Что облегчить процесс смены версий, NVM позволяет использовать псевдонимы для определения версий без указания номера. Примеры стандартных алиасов:— node: устанавливает самую последнюю стабильную версию Node.js— unstable: устанавливает самую последнюю стабильную версию Node.js— iojs: устанавливает самую последнюю стабильную версию io.js

Для установки последней стабильной версии Node.js выполните следующую команду

Также существует алиас по умолчанию. Для установки версии по умолчанию используйте такую команду

Кроме того, вы можете создавать собственные алиасы:

Для удаления алиаса, выполните команду unalias:

Переключения между версиями Node.js

Каждый раз как вы устанавливаете новую версию Node.js, она будет автоматически выбираться для использования. Для переключения между версиями используется команда, nvm use которая работает почти также как и команда install. Например если вы хотите переключиться на последнюю стабильную версию, выполните команду

Для получения списка всех установленных версий Node, используется команда nvm ls:

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

Дополнительные команды

— Существует несколько дополнительных команд, которые могут вам когда-нибудь понадобиться. Чтобы запустить команду для установленной версии без переключений переменных node, используйте такой формат

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

— если вы хотите узнать путь к исполняемым файлам Node.js для какой-то версии Node, используйте следующий формат

— Также вы можете назначить желаемую версию Node.js для ваших проектов, создав .nvmrc файлы в репозитории проектов. Существует плагин avn https://github.com/wbyoung/avn, который позволяет автоматичски переключпаться между версиями при смене директорий.

Use

In your add:

{"scripts"{"install""npm-git install"}"gitDependencies"{"private-package-name""git@private.git.server:user/repo.git#revision","public-package-name""https://github.com/user/repo.git#revision"}}

Obviously replace and git URLs with values relevant to your project. URLs has to be in canonical form (i.e. one that you would provide to on command line) — no fancy NPM shortcuts like or . If you want this, we are open for a PRs.

Then install your dependencies as usual:

npm install

If you want to lock versions of git dependencies, use:

./node_modules/.bin/npm-git install --save

This will reinstall all git dependencies, but also write last matching commit’s sha to , effectively locking the versions.

You can also add a dependency and lock it’s sha in one go:

./node_modules/.bin/npm-git install --save me@my.git.server:me/my-awesome-thing.git

This is probably the safest option, as it guarantees the same revision to be installed every time.

Now it should be easy to deploy, as long as the git executable is available in the environment.

Установка при помощи PPA

Альтернативный способ, при помощи которого можно установить более свежую версию Node.js, — это использование PPA (персональный архив пакетов), который поддерживается компанией NodeSource. В архиве содержатся более новые версии Node.js, чем в официальных репозиториях Ubuntu. Используя архив вы также сможете выбирать между Node.js v6.x (поддерживается до апреля 2019), Node.js v8.x (текущая версия с долгосрочной поддержкой до декабря 2019) и Node.js v10.x (последняя версия, поддерживается до апреля 2021).

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

Вы можете просмотреть содержимое скрипта с помощью (или любого другого текстового редактора):

Запустите скрипт с правами :

PPA будет включен в конфигурацию и ваш локальный кэш пакетов обновится автоматически. После выполнения установочного скрипта от Nodesource, вы можете установить Node.js так же, как описано ранее:

Для проверки того, какую именно версию Node.js вы установили в процессе, описанном выше, выполните команду:

Пакет содержит и и , поэтому нет никакой необходимости в дополнительной установке .

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

Для работы некоторых пакетов из (например таких, которые требуют компиляцию из исходников), вам потребуется установить пакет :

Теперь у вас есть все необходимые инструменты для работы с пакетами , которые требуют компиляции из исходников.

Шаг 3 — Установка PM2

Теперь установим диспетчер процессов PM2, предназначенный для приложений Node.js. PM2 позволяет преобразовывать приложения в демонов, чтобы они работали как службы в фоновом режиме.

Используйте для установки последней версии PM2 на своем сервере:

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

Вначале используем команду для запуска вашего приложения  в фоновом режиме:

Также она добавит ваше приложение в список процессов PM2, которы йвыводится при каждом запуске приложения:

Как указано выше, PM2 автоматически присваивает (основанное на имени файла, без расширения ) и PM2 . PM2 также обслуживает другие данные, такие как процесса, его текущее состояние и использование памяти.

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

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

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

Дополнительно мы можем сохранить список процессов PM2 и соответствующие среды:

Теперь вы создали блок systemd, который запускает для вашего пользователя при загрузке. Этот экземпляр запускает .

Запустите службу с помощью команды :

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

Проверьте состояние блока systemd:

Подробный обзор блока systemd можно найти в разделе Основы работы с Systemd: работа со службами, блоками и журналом.

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

Остановите приложение с помощью этой команды (укажите PM2 или ):

Перезапустите приложение:

Выведем список приложений, управление которыми осуществляет PM2:

Получим информацию об определенном приложении по :

Монитор процесса PM2 запускается с помощью субкоманды . При этом отображается состояние приложение, использование ресурсов ЦП и использование памяти:

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

Теперь ваше приложение Node.js запущено и управляется PM2, и мы можем настроить обратный прокси-сервер.

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

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