Installing Node.js on macOS

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

Оглавление

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

Бинарный пакет

Пакет установки/инсталлятор

Удаление Node.js из macOS

2.2 Компиляция и установка

2.3 Менеджер версий Node

2.4 Node и Docker

2.5 Заключение

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

Как и в случае с ОС Windows, для macOS доступен двоичный пакет и инсталлятор.

Бинарный пакет

Самый простой способ запустить Node.js в macOS – скачать и использовать бинарный исполняемый пакет. Пакет доступен в виде заархивированного tar архива. Все что нам нужно – это скачать и разархивировать скачанный архив, как показано в листинге 2.9

% wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-darwin-arm64.tar.gz
% tar xvzf node-v18.16.0-darwin-arm64.tar.gz
% cd node-v18.16.0-darwin-arm64
% bin/node -v
v18.16.0

Листинг 2.9 Установка бинарного пакета Node.js в macOS

Как видно из листинга 2.9, Вы можете использовать Node.js сразу после установки. Используя опцию -v, Вы можете отобразить версию используемой платформы и заодно Вы проверите, правильно ли работает Node. Главным недостатком здесь является та же проблема с путями и необходимостью ручного добавления в системное окружение пути к исполняемым файлам. Этого недостатка лишен способ установки Node.js через инсталлятор.

Пакет установки/Инсталлятор

Для запуска процесса установки, Вы должны открыть/запустить скаченный файл *.pkg. Также, как и в случае установки в ОС Windows, вы пройдете через несколько шагов, в результате которых получите полностью рабочую платформу Node.js. На рисунке 2.6 показан первый шаг установки, из которого Мы видим куда будет установлен Node.js и менеджер пакетов npm. Нажмите Continue чтобы продолжить установку.

Installing Node.js on macOS
Рис 2.6 Инсталляция Node.js в macOS

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

Node.js for macOS License Teams
Рис 2.7 Пользовательское соглашение Node.js

После нажатия кнопки Continue, в отдельном всплывающем окне Вам будет предложено согласиться с лицензией Node.js. У Вас есть выбор либо согласиться и продолжить установку либо не согласиться и прервать процесс установки. Также Вы всегда можете вернуться назад, нажав кнопку Back, если сомневаетесь что выбрали правильный вариант установки на предыдущих шагах.

Type of installation
Выбор типа установка

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

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

После завершения копирования файлов и настройки системы, установка будет завершена и вы увидите результат установки, как на рисунке 2.9

Completing the Node.js Installation
Рис 2.9 Завершение установки Node.js. в macOS

После завершения установки, если Вы внимательно смотрели и читали о том, что происходит на каждом этапе разработки, Вы знаете местоположение платформы Node.js и менеджера пакетов npm. Теперь Вы знаете какой каталог нужно включить в системную переменную PATH, чтобы Вы могли использовать Node.js  с помощью команды nodeбез необходимости указания полного пути. По умолчанию каталог /usr/local/bin уже находится в системной переменной PATH, как указано в листинге 2.10:

$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Листинг 2.10 Отображение переменной PATH в macOS

Если Вы выполнили установку согласно приведенным в книге указаниям, теперь Вы можете использовать платформу для разработки Ваших мощных и современных приложений. Для того, чтобы убедиться в том, что Вы все сделали правильно, введите команду node -vи посмотрите на ее вывод.

% node -v
v18.16.0

Листинг 2.11 Запрос номера исполняющейся версии Node.js

Удаление Node.js из macOS

Если Вы хотите удалить бинарный пакет с Node.js  в ОС macOS  – Вам необходимо всего лишь удалить директорию, с распакованной платформой.

Если Вы установили Node.js через инсталлятор, при удалении Вам необходимо помнить что необходимо удалить  все файлы, которые установщик pkg установил в систему. Для этого нам надо посмотреть логи установщика pkg, чтобы выяснить какие файлы куда были установлены. Эту информацию Вы можете найти в каталоге/var/db/receipts в файлах org.nodejs.node.npm.pkg.bom и org.nodejs.pkg.bom. Расширение файла *.bom – список материалов. В этих файлах хранится информация о местоположении устанавливаемых файлов. Поскольку вся эта информация представлена в двоичном виде, для ее отображения в удобочитаемом виде необходимо воспользоваться инструментом pkgutil . Инструмент pkgutil принимает на входе имена пакетов и показывает местоположение устанавливаемых файлов. Имя нашего интересуемого нас пакета org.nodejs.pkg. Как показано в листинге 2.12, метаданные могут быть отображены используя ключ --pkg-info

% pkgutil --pkg-info org.nodejs.node.pkg
version: v18.16.0
volume: /
location: /
install-time: 1682190745

Листинг 2.12 Отображение метаданных пакета Node.js в macOS

В листинге 2.13 показано, что Вы установили Node.js на том / и платформа установлена в путь /usr/local. Этот путь представляет собой префикс для списка файлов, который можно получить из файла с расширением bom, как указано в листинге ниже

% pkgutil --lsbom org.nodejs.node.pkg
.
./usr
./usr/local
./usr/local/bin
./usr/local/bin/corepack
./usr/local/bin/node
./usr/local/include
./usr/local/include/node
./usr/local/include/node/common.gypi
./usr/local/include/node/config.gypi
./usr/local/include/node/cppgc
./usr/local/include/node/cppgc/common.h
./usr/local/include/node/js_native_api.h

 

Листинг 2.13 Список установленных файлов в macOs

В предыдущих версиях утилиты pkgutil Вы могли также удалить пакет, используя опцию --unlink. Этот параметр был удален в последних версиях, поскольку удаление пакета может затронуть работу других сервисов, программ и утилит. По этой причине Вам необходимо с особой осторожностью удалять пакет, который был установлен с помощью установщика PKG. В простейшем случае Вы можете удалить пакет вручную или создать сценарий оболочки shell, который удалит все необходимые файлы. После удаления файлов, Вы можете также удалить всю информацию об установленном пакете с помощью pkgutil, как показано в листинге 2.14.

% sudo pkgutil --forget org.nodejs.pkg

Листинг 2.14 Удаление информации об установленном пакете в системе macOS.

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

После выполнения шагов установки, описанных в этом разделе, Вы имеете работоспособную версию платформы Node.js, которую Вы можете использовать для разработки собственных приложений. В главе 3 Мы научим Вас разрабатывать Ваше первое. полностью работоспособное приложение. Оставшаяся часть Главы 2 посвящена ручной компиляции и установке Node.js из исходного кода. Если Вам это не интересно от слова совсем – Вы можете перейти сразу к Главе 3.

2.2 Компиляция и установка

Вы этом разделе  Вы узнаете, как работать в Вашей системе с Node.js, не имея никаких дел с бинарными пакетами или установщиками, а создавая самим платформу из исходных кодов для Вашей системы. В этом разделе описывается как компилируется Node.js из исходных кодов. Компиляция и сборка выполнены в Debian 11. Первый шаг – это скачивание исходных кодов. Они доступны в виде tar архива по адресу https://nodejs.org/en/download/. Перед сборкой убедитесь, что У Вас установлен компилятор gcc и g++, так как по умолчанию они отсутствуют в системе. Вы можете установить его через диспетчер пакетов, как указано в Листинге 2.15

sudo apt-get install g++

Листинг 2.15 Установка G++ компилятора в Debian

После скачивания и распаковки архива, перейдите в распакованный архив и следуйте инструкциям:

$ wget https://nodejs.org/dist/v18.16.0/node-v18.16.0.tar.gz
$ tar xvzf node-v18.16.0.tar.gz
$ cd node-v18.16.0

Листинг 2.16 Распаковка архива с исходным кодом Node.js

Первый шаг – это создание файла makefile. Этот файл содержит инструкции для сборки продукта командой make. В нашел случае речь идет об Node.js. Необходимости в ручном создании файла –  makefile нет, для этого необходимо использовать инструмент configure. Этой команде можно передать все параметры, доступные документацией проекта. Доступные параметры: without-npm  для сборки без менеджера пакетов npm или --without-ssl для сборки без пакета шифрования SSL. Другие параметры нужны для включения различных библиотек, таких как V8, OpenSSL или zlib в качестве расшаренных(динамических) библиотек, вместо их статического связывания. Параметр --dest-cpu= позволяет выбрать целевую архитектуру: доступные значения параметра – это arm, ia32 и x64. Вы также можете выбрать операционную систему для которой будет собран Node.js. В этом случае передайте параметру --dest-os= значение win, mac, или linux.

Также важным параметром для конфигуратора configure является --prefix. Он указывается местоположение установки Node.js. Если Вы не будете его использовать, место установки по умолчанию – /usr/local. Относительно этого пути, будут копироваться все файлы платформы Node.js. Используя эту опцию, Вы можете установить несколько версий платформы в разные местоположения файловой системы. Используя команду ./configure --help Вы можете посмотреть весь список доступных параметров.

Листинг 2.17 показывает процесс сборки и установки.

$ ./configure --prefix=/opt/node/node-v18.16.0
Node.js configure: Found Python 3.9.2...
INFO: configure completed successfully
$ make
...
 g++ -o /src/node-v18.16.0/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/objects/osr-optimized-code-cache.o ../deps/v8/src/objects/osr-optimized-code-cache.cc '-D_GLIBCXX_USE_CXX11_ABI=1' '-DNODE_OPENSSL_CONF_NAME=nodejs_conf' '-DNODE_OPENSSL_HAS_QUIC' '-DICU_NO_USER_DATA_OVERRIDE' '-DV8_GYP_BUILD' '-DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DV8_TARGET_ARCH_X64' '-DV8_HAVE_TARGET_OS' '-DV8_TARGET_OS_LINUX' '-DV8_EMBEDDER_STRING="-node.26"' '-DENABLE_DISASSEMBLER' '-DV8_PROMISE_INTERNAL_FIELD_COUNT=1' '-DV8_SHORT_BUILTIN_CALLS' '-DOBJECT_PRINT' '-DV8_INTL_SUPPORT' '-DV8_ATOMIC_OBJECT_FIELD_WRITES' '-DV8_ENABLE_LAZY_SOURCE_POSITIONS' '-DV8_USE_SIPHASH' '-DV8_SHARED_RO_HEAP' '-DV8_WIN64_UNWINDING_INFO' '-DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH' '-DV8_ENABLE_WEBASSEMBLY' '-DV8_ENABLE_JAVASCRIPT_PROMISE_HOOKS' '-DV8_ALLOCATION_FOLDING' '-DV8_ALLOCATION_SITE_TRACKING' '-DV8_SCRIPTORMODULE_LEGACY_LIFETIME' '-DV8_ADVANCED_BIGINT_ALGORITHMS' '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' '-DUCONFIG_NO_SERVICE=1' '-DU_ENABLE_DYLOAD=0' '-DU_STATIC_IMPLEMENTATION=1' '-DU_HAVE_STD_STRING=1' '-DUCONFIG_NO_BREAK_ITERATION=0' -I../deps/v8 -I../deps/v8/include -I/src/node-v18.16.0/out/Release/obj/gen/inspector-generated-output-root -I../deps/v8/third_party/inspector_protocol -I/src/node-v18.16.0/out/Release/obj/gen -I/src/node-v18.16.0/out/Release/obj/gen/generate-bytecode-output-root -I../deps/icu-small/source/i18n -I../deps/icu-small/source/common -I../deps/v8/third_party/zlib -I../deps/v8/third_party/zlib/google  -pthread -Wno-unused-parameter -m64 -Wno-return-type -fno-strict-aliasing -m64 -O3 -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++17 -MMD -MF /src/node-v18.16.0/out/Release/.deps//src/node-v18.16.0/out/Release/obj.target/v8_base_without_compiler/deps/v8/src/objects/osr-optimized-code-cache.o.d.raw   -c
...
rm 4e0e4d3c604ca7b35dffafc4c743a9b474c3b0ac.intermediate ab3a4ccb570adf0697d7f66826e4f4f818c5cb13.intermediate 4bfa9430cf5a57a7cf03faed86028f3746677370.intermediate f47420d9528fd8bda3e8c96f414b8b2114bd4a91.intermediate
if [ ! -r node ] || [ ! -L node ]; then \
  ln -fs out/Release/node node; fi
....
$  sudo make install
...
installing /opt/node/node-v18.16.0/include/node/zconf.h
installing /opt/node/node-v18.16.0/include/node/zlib.h

Листинг 2.17 Компиляция и установка Node.js в Debian

Первая команда из листинга 2.17 – configure используется для создания файла makefile Node.js. Мы используем --prefix=/opt/node/node-v18.16.0 для установки  Node.js в отдельную директорию. Вся эта информация записана в makefile. Следующая команда – make берет инструкции к сборке файла makefile и ищет в нем цели для сборки. Затем происходит сама сборка в соответствии с информацией из makefile. Цель этого шага сборки – получить исполняемую версию Node.js, но она пока будет находиться в той же директории, где и выполняется сборка. И наконец последняя команда make install выполняет копирование скомпилированных файлов в нужное место. Так как обычно у пользователя нет необходимых прав для доступа к папке /opt – необходимо выполнить команду с правами sudo.

После выполнения этой команды вы должны увидеть новую директору node в /opt. Здесь теперь находится Ваш Node.js. Теперь Вы можете протестировать установку, выполнив исполняемый файл node с параметром -v в директории /opt/node/node-v18.16.0/bin. В качестве вывода Вы должны получить номер устанавливаемой вами версии Node.js. Если все работает – можно удалить папку с распакованными исходными файлами – так как они больше не нужны Вам. Также, как и в случае с двоичным исполняемым пакетом, проблема заключается в том, что необходимо вручную прописать путь к исполняемому файлу Node.js в системный путь ОС. В следующем разделе этой главы более подробно рассматривается решение этой проблемы.

Установка Node.js в директорию /opt позволяет Вам запускать сразу несколько версий Node.js параллельно в Вашей системе. Если Вы разрабатываете приложение, которое должно работать в разных версиях Node.js и хотите протестировать Ваше приложение, этот подход будет хорошей идеей. Например Вы можете тестировать свое приложение в самых последних версиях платформы, не удаляя стабильную версию платформы. Самый простой путь – это создать символическую ссылку на ту версию Node.js, которую Вы хотите использовать постоянно и добавить ее в системный путь. В случае, если Вы захотите сменить версию платформы, можно легко и быстро изменить символическую ссылку. В листинге 2.18 показывается, как Вы можете создать ссылку.

$ sudo ln -s /opt/node/node-v18.16.0 /opt/node/node

Листинг 2.18 Создание символической ссылки.

И в заключение Вам необходимо добавить путь к символической ссылку в конец файла /etc/profile

PATH=$PATH:/opt/node/node/bin
export PATH

Листинг 2.19 Добавление пути к Node.js в путь поиска Linux

Теперь у Вас есть работающая версия Node.js. Чтобы заново перечитать файл /etc/profile без перезагрузки, введите source /etc/profile. Введите в терминале команду node -v и убедитесь, что все работает должны образом. Теперь Вы можете перейти к разработке Ваших собственных приложений в Главе 3. А в заключении мы немного рассмотрим менеджер версий Node и Docker.

2.3 Менеджер Версий Node

Как Вы увидели в предыдущем разделе, установка одновременно нескольких версий не совсем проста, как может показаться. В частности это нужно, если Ваша библиотека или приложение должны выполняться в разных версиях систем, Вам потребуется несколько параллельных версий платформы для тестирования. Решение этой проблемы – это использование NVM Node Version Manager)(Менеджер Версий Node) – инструмент командной строки для систем Unix. Этот инструмент позволяет устанавливать и обновлять Node.js. NVM работает в системах Unix, macOs и подсистеме Windows для Linux(WSL), и позволяет переключаться между разными версиями Node.js. Для Windows альтернативной является nodist, nvs и nvm-windows.

Листинг 2.20 показывает, как запустить nvm.

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

Листинг 2.20 Установка nvm

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

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads                                     nvm bash_completion

Листинг 2.21 Конфигурация nvm

Первый шаг в использовании nvm – это установка требуемой версии Node.js. Команда nvm install 18 устанавливает последнюю версию Node 18 в Вашу систему. После завершения установки nvm переключится на эту версию.

Nvm имеет важную функцию, когда Вы работаете с установленными npm пакетами. Каждая установленная версия Node.js имеет свои собственные глобальные npm пакеты. Чтобы перенести пакеты в следующую версию, Вы можете использовать опцию --reinstall-packages-from. Для этого параметра вы указываете номер версии установки Node.js, в которой Вы установили необходимые глобальные npm пакеты.

Для того, чтобы переключиться с текущей версии, например на 16 установленную версию, используйте команду nvm use 16. Введите команду nvm list и вы увидите список доступных установок в вашей системе. Вы также можете ввести команду nvm list-remote для отображения всех устанавливаемых версий.

2.4 Node и Docker

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

В руководящем техническом комитете(TSC) есть рабочая группа, которая ответственна за разработку официальных образов Docker – создает, управляет и  улучшает их. Рабочая группа также ответственна за то, чтобы образы последних версий Node.js были всегда доступны в Docker.

Docker образы, которые Вы можете найти на сайте https://hub.docker.com/_/node уже установлены пакеты npm и Yarn. Для дополнительной информации о работе с Docker, обратитесь к Главе 25.

2.5 Заключение

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

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

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

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

Глава 3. Разработка Вашего первого приложения

Leave a Reply

Please disable your adblocker or whitelist this site!