Как установить node js на windows глобально
Перейти к содержимому

Как установить node js на windows глобально

  • автор:

Как правильно установить node.js окружение?

Существует несколько способов установки Node.JS и сложно понять какой из них лучше. В этой статье мы сравним разные способы (прямая установка, системные пакетные менеджеры, nvm, n, nodenv, volta, fnm). TLDR: я предпочитаю использовать fnm

Самый простой вариант установить Node.JS это пойти на nodejs.org и скачать установщик. Но это не лучшая идея. Вариант чуть получше, воспользоваться системным пакетным менеджером( brew , apt , dnf ). В обоих случаях нельзя быстро сменить версию Node.JS. Часто актуальный проект требует свежую LTS версию, легаси проект работает под предыдущим LTS, а так же хочется попробовать новые фишки из Current версии.

Самое популярное решение это Node Version Manager nvm . Но, во-первых, он невероятно медленный. Каждое открытие консоли с установленным nvm будет занимать до нескольких секунд. Во-вторых, он не поддерживает fish и windows. В-третьих, глобально установленные пакеты прийдётся ставить каждый раз заново, либо нужно прописывать их в специальном файле. n и nodenv имеют примерно те же проблемы.

Следующее решение это Volta. Написано на Rust, а значит должно быть быстрым. Поддерживает fish и даже windows. Глобально установленные библиотеки работают даже после смены версии. Но не поддерживается .nvmrc / .node-version файлы, хотя на замену тут предлагается писать версию ноды в package.json . Ещё из недостатков, поддержка pnpm находится в экспериментальном режиме.

И наконец Fast Node Manager fnm . Написан также на Rust. Работает быстро и поддерживает всё что надо. Устанавливается fnm одной командой:

curl -fsSL https://fnm.vercel.app/install | bash

Далее можно установить версию Node.JS которая будет использоваться по умолчанию:

fnm default 18

Теперь можно добавить в проект файл .node-version с указанием версии Node.JS, которая будет использоваться в этом проекте.

echo 18.17.0 > .node-version

При открытии консоли в папке с проектом, fnm автоматически включит нужную версию Node.JS.

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

fnm install fnm use

Установка pnpm/yarn

Node.JS, начиная с версии 16.13, получил поддержку Corepack. Эта утилита позволяет использовать любой поддерживаемый пакетный менеджер без ручной установки. Всё что нужно сделать, это включить corepack:

corepack enable

После чего при первом использовании pnpm / yarn они автоматически установятся и будут работать.

Управление версиями Node.js с помощью nvm в Windows

Вопрос экономии времени и удобства окружения разработчика — штука сложная. Работая с Node.js, иногда приходится тестировать своё приложение не только в той версии, которую используете вы, но и в тех, что были выпущены до неё или даже после. В большинстве своём, это касается пакетов (библиотек), которые распространяются через npm. Разумеется, вы можете использовать для этих целей Travis CI, но этот инструмент создан не для этого.

Наиболее простым способом устанавливать и переключать версии Node.js на Linux является использование утилиты nvm. Для разработчиков, которые «сидят» на Windows, существует порт этой утилиты, хотя и менее продвинутый. Разбираемся в управлении версиями Node.js через консоль в Windows.

Что такое nvm?

nvm (Node Version Manager) — это довольно простой скрипт, который позволяет устанавливать, переключать и удалять версии Node.js на лету. Проще говоря, nvm даёт вам возможность держать на одной машине любое количество версий Node.js. При установке новой версии для неё создаётся отдельная директория, например, 5.0.0 или 4.2.2. При переключении версий скрипт подменяет путь до Node.js в PATH.

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

Установка nvm

Напомню, что речь сейчас идёт про Windows, и установить nvm здесь так же «сложно», как и любую другую программу или игру. Для этого вам придётся перейти в репозиторий nvm-windows и загрузить установочный пакет. Далее процедура полностью стандартна, как и для любого другого установочного файла в Windows: выбираете директорию установки и несколько раз кликаете на «Далее».

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

Теперь, когда у вас установлен nvm, пришло время добавить новую версию Node.js. Для этого потребуется прочитать справку, которую можно вызвать, используя команду nvm .

Команды nvm

Сначала посмотрим на список доступных для установки версий Node.js, который можно открыть командой $ nvm list available . В этом списке доступны как стабильные, так и нестабильные релизы.

Доступные версии Node.js

Обратите внимание, что здесь не хватает 5-ой версии Node.js. Дело в том, что создатель nvm для Windows ещё не подготовил новый релиз, добавляющий 5-ую версию Node.js в этот список.

Итак, установим последнюю версию Node.js четвертой ветки. Для этого, к сожалению, потребуется полностью прописать версию Node.js, хотя в версии под Linux и OSX можно просто указывать мажорную цифру (4 или 5).

$ nvm install 4.2.2 

Тоже самое можно проделать с пятой веткой:

$ nvm install 5.1.0 

Помимо версии, при установке есть возможность указать разрядность, например, для установки Node.js 5.1.0 32-битной разрядности следует выполнить

$ nvm install 5.1.0 32

Переключение версий

Посмотрим на список уже установленных версий Node.js на вашей машине, выполнив в консоли команду $ nvm list :

Список установленных версий Node.js

Для того, чтобы начать использовать Node.js версии 4.2.2, нужно прописать в консоли $ nvm use 4.2.2 . После этого из консоли станет доступна именно эта версия Node.js и поставляемая вместе с ней версия npm:

Node.js 4.2.2

Соответственно, чтобы переключиться на Node.js версии 5.1.0, нужно выполнить команду:

$ nvm use 5.1.0

Теперь, когда вы выполняете команду $ nvm list , в выводе будет присутствовать указатель текущей версии:

Текущая версия Node.js

Создание синонимов

Я вынужден был создать этот заголовок в виду того, что «настоящий» nvm позволяет назначать установленным версиям Node.js синонимы. К сожалению, пока что nvm для Windows не умеет этого.

Немного про глобальные пакеты

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

Для примера я установлю свой же пакет windows-ls в версии 4.2.2 и попытаюсь использовать его в версии 5.1.0. В итоге я получаю ошибку, говорящую о том, что такого пакета нет.

Глобальные пакеты Node.js и nvm

Итоги

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

9. Глобальные модули

Следующая возможность которую мы с вами рассмотрим это глобальные модули. Любой модуль можно поставить глобально если поставить флаг «-g».

JavaScript
> npm — g install express

На «MAC» сразу может не получится, потому что глобально означает в системную директорию. Если операционная система поддерживает ограничение доступа, то как правило от обычного юзера, в системную директорию я писать не имею права. Для этого на «MAC» надо сделать запуск через команду «sudo» выглядеть это будет вот так

JavaScript
> sudo npm — g install express

У меня же «Windows», а в «Windows» директория глобальных модулей находится внутри каталога юзера — C:\Users\имя_пользователя\AppData\Roaming\npm по этому ни каких особых разрешений для установки модулей глобально не нужно.

Screenshot_09_01

как видите в первой строке я ввел команду «npm -g i express». Помните мы с вами говорили о том, что «i» и «install» это одно и то же. Во второй строке показан путь куда «NPM» поставил наш модуль, давайте посмотрим

Screenshot_09_02

Так и есть, «NPM» создал папку «node_modules» и поставил туда «express» причем последней версии, так как мы ее не указывали в команде.

Чем глобальная установка отличается от обычной? В первую очередь это местом, глобальные модули ставятся в стандартную системную директорию. Второе, это то что те бинарники которые есть в свойстве «bin» в «package.json» будут поставлены по системному пути. Это означает, что бинарник «express» я теперь могу вызвать просто вот так

Screenshot_09_03

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

Любые дальнейшие операции с глобальными модулями осуществляют так же как с обычными, но с флагом «-g». Например верну себе обратно четвертый «express», обновлюсь

Screenshot_09_04

можно было просто ввести

node.js для Java-разработчиков: первые шаги

У опытного программиста, сталкивающегося с новой технологией для решения конкретной прикладной задачи, сразу возникает множество практических вопросов. Как правильно установить платформу? Где и что будет лежать после установки? Как создать каркас проекта, как он будет структурирован? Как разбивать код на модули? Как добавить библиотеку в проект? Где вообще взять готовую библиотеку, которая делает то, что нужно? Как и в чём отлаживать код? Как написать модульный тест?

Ответы на эти вопросы можно при желании легко найти в сети, но придётся перечитать дюжину статей, и на каждый вопрос ответов будет, скорее всего, несколько. Некоторое время назад мне понадобилось написать небольшой туториал по node.js, который бы позволил быстро запустить разработку и познакомить новых программистов в проекте с этой технологией. Рассчитан он на опытных Java-разработчиков, которые и язык JavaScript хорошо знают, но node.js как платформа для бэкэнда для них в новинку.

Думаю, что данная статья будет полезна не только разработчикам из мира Java, но и всем, кто начинает работу с платформой node.js.

Установка и настройка
Установка node и npm
Windows

Установка node.js под Windows производится с помощью msi-инсталлятора. Для его загрузки нужно перейти на сайт https://nodejs.org и щёлкнуть «Install». После скачивания инсталлятора (файл с именем вида node-v0.12.4-install.msi) необходимо запустить его и следовать инструкциям по установке.

По умолчанию под Windows node.js устанавливается в папку c:\Program Files\nodejs. Также по умолчанию устанавливаются все компоненты (собственно node.js, пакетный менеджер npm, ссылка на документацию; кроме того, путь к node и npm прописывается в переменную среды PATH). Желательно убедиться, что все компоненты установки выбраны.

OS X

В OS X проще всего установить node через менеджер пакетов brew. Для этого необходимо выполнить команду:

> brew install node 

Node установится в папку /usr/local/Cellar//node с постоянным симлинком /usr/local/opt/node/.

Ubuntu (x64)

Для установки последней ветки (0.12) лучше скачать дистрибутив с сайта:

wget http://nodejs.org/dist/v0.12.4/node-v0.12.4-linux-x64.tar.gz sudo tar -C /usr/local --strip-components 1 -xzf node-v0.12.4-linux-x64.tar.gz 

Дистрибутив распакуется в папку /usr/local в подпапки bin, include, lib и share.

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

Для проверки корректности установки можно запустить в командной строке node и npm с параметром —version:

> node --version v0.12.4 > npm --version 2.10.1 
Установка плагина в IntelliJ IDEA

Запустим IntelliJ IDEA, зайдём в настройки.

Найдём раздел Plugins и щёлкнем «Install JetBrains Plugin. »

Найдём в списке плагин NodeJS, щёлкнем по кнопке «Install Plugin». По окончании загрузки кнопка превратится в «Restart IntelliJ IDEA» — щёлкнем её для перезагрузки среды.

После перезагрузки зайдём в настройки и найдём раздел Languages & Frameworks -> Node.js and NPM. Убедимся, что в разделе «Node interpreter» указана ссылка на установленный исполняемый файл node.

В разделе «Sources of node.js Core Modules» щёлкнем кнопку «Configure». В появившемся окне выберем «Download from the Internet» и щёлкнем «Configure», при этом скачаются и проиндексируются исходники node.js. Это позволит просматривать исходники при разработке.

В разделе packages отображаются глобально установленные пакеты (см. раздел «Глобальные пакеты»). В этом окне можно добавлять, удалять и обновлять эти пакеты. Если рядом с именем пакета отображается синяя стрелочка, значит, доступно обновление. Глобально лучше устанавливать только пакеты-утилиты.

Первые шаги
Пишем «Hello World»

Создадим файл app.js, который формирует и выводит соответствующую строчку в консоль:

// файл app.js var greeting = 'hello'; greeting += ' world!'; console.log(greeting); 

Запустим его командой:

> node app.js hello world! 
Используем REPL

Запустив команду node без аргументов, можно попасть в REPL-цикл, аналогичный браузерной JS-консоли. В нём можно выполнять и проверять фрагменты кода:

> node > console.log('hello world!') hello world! undefined > [1, 2, 3].reduce(function(sum, item), 0) 6 

Каждая выполненная строчка имеет возвращаемый результат, который также выводится в консоль. Функция console.log() не возвращает результата, поэтому после её вызова в консоли вывелось «undefined».

В REPL-консоли работает автодополнение по нажатию клавиши Tab. Например, если написать «console.» и нажать Tab, то отобразится список атрибутов и функций объекта console.

> console. console.__defineGetter__ console.__defineSetter__ console.__lookupGetter__ console.__lookupSetter__ console.__proto__ console.constructor console.hasOwnProperty console.isPrototypeOf console.propertyIsEnumerable console.toLocaleString console.toString console.valueOf console.assert console.dir console.error console.info console.log console.time console.timeEnd console.trace console.warn console.Console console._stderr console._stdout console._times > console. 

Для выхода из консоли можно нажать Ctrl+D.

Работа с npm
Инициализация проекта

Для инициализации проекта выполним в каталоге будущего проекта команду npm init и введём необходимые данные в интерактивном режиме (можно просто нажимать Enter, так как предлагаются внятные настройки по умолчанию):

> npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (nodetest) version: (1.0.0) description: my first node application entry point: (index.js) app.js test command: git repository: keywords: author: license: (ISC) About to write to ***\package.json: < "name": "nodetest", "version": "1.0.0", "description": "my first node application", "main": "app.js", "scripts": < "test": "echo \"Error: no test specified\" && exit 1" >, "author": "", "license": "ISC" > Is this ok? (yes) 

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

Добавление пакетов-зависимостей в проект

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

> npm install --save log4js log4js@0.6.25 node_modules/log4js ├── async@0.2.10 ├── underscore@1.8.2 ├── semver@4.3.4 └── readable-stream@1.0.33 (isarray@0.0.1, inherits@2.0.1, string_decoder@0.10.31, core-util-is@1.0.1) 

После выполнения этой команды обнаружим, что в текущем каталоге появилась папка node_modules\open, а в файле package.json добавилась запись:

 "dependencies":

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

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

Пакеты можно устанавливать как в каталог проекта, так и глобально, тогда они будут видны для всех проектов. Как правило, глобально устанавливаются только пакеты, являющиеся утилитами, например, утилита управления зависимостями bower, сборщики gulp и grunt, генератор проектов на Express express-generator, и т.д.

Глобальные пакеты устанавливаются:

  • В Windows 8 — в %USERPROFILE%\AppData\Roaming\npm\node_modules,
  • В OS X — в /usr/local/lib/node_modules,
  • В Ubuntu — в /usr/local/lib/node_modules.

Чтобы установить пакет глобально, команда npm выполняется с ключом -g:

npm install -g grunt 
Работа в IntelliJ IDEA
Открытие проекта

Чтобы открыть проект на node.js, достаточно открыть папку, содержащую package.json.

Настройка конфигурации запуска

Для запуска и отладки в IntelliJ IDEA необходимо создать конфигурацию запуска. Для этого зайдём в Run -> Run Configurations, щёлкнем плюсик в левом верхнем углу и выберем node.js:

Заполним поля Name и JavaScript File:

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

Отладка

Для отладки необходимо запустить созданную конфигурацию в режиме Debug. При этом можно ставить брейкпойнты на строки, «шагать» по строкам, смотреть содержимое стека вызовов, значения переменных в текущем контексте и делать всё прочее, что ожидается от отладочного режима.

Модульность в node.js

В Java единицами модульности являются пакеты и классы. Единицей модульности в node.js является файл. Чтобы сделать импорт одного модуля в другой, используется модуль-локальная (т.е. неявно определённая в каждом модуле) функция require(). Стандартные модули или пакеты, установленные в node_modules, можно импортировать по простому имени:

var http = require('http'); 

В переменную http будет помещён объект, который был экспортирован модулем http.

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

// файл myproject/somedir/mymodule1.js mymodule2 = require('../anotherdir/mymodule2'); mymodule2.fun(); 
// файл myproject/anotherdir/mymodule2.js module.exports.fun = function()

Всё, что объявлено в файле модуля, видно только внутри него — за исключением того, что мы явно экспортируем. Например, в отличие от JavaScript в браузере, область видимости переменной, объявленной на верхнем уровне, ограничена тем модулем, в котором она объявлена:

// файл mymodule.js var enterprise = 'bloody'; 

Переменная enterprise будет видна только внутри модуля mymodule.js.

Чтобы экспортировать что-либо из модуля, можно использовать доступный в любом модуле атрибут module.exports, который по умолчанию содержит в себе пустой объект. Можно также использовать сокращённую ссылку на него — модуль-локальную переменную exports. Функция require(), которой передано имя нашего модуля, будет возвращать то, что мы поместили в module.exports. Соответственно, если мы поместим туда такой объект:

// файл mymodule.js module.exports = < fun: function() < console.log('hello world!'); >> 

То именно его вернёт функция require, будучи вызванной в другом модуле:

// файл mymodule-client.js mymodule = require('./mymodule'); mymodule.fun(); 

Полученный объект mymodule — это тот же самый объект с функцией fun, который был присвоен атрибуту module.exports в нашем модуле.

Однако подобным способом сделать экспорт не получится:

// файл mymodule.js exports = < fun: function() < console.log('hello world!'); >> 

Это связано с тем, что из модуля всегда экспортируется атрибут module.exports. Заменив сокращённую ссылку exports на другой объект, мы не изменили этот атрибут. Сокращённая ссылка exports может быть использована только для экспорта каких-то отдельных функций или атрибутов:

// файл mymodule.js exports.fun = function()
// файл mymodule-client.js require('./mymodule').fun(); 
Тестирование
Mocha

Для добавления модульного тестирования в проект лучше всего начать с фреймворка Mocha. Устанавливается он как глобальный npm-модуль:

npm install -g mocha 

Протестируем модуль с простейшей функцией:

// файл mymodule.js exports.fun = function(name)

Тесты mocha по умолчанию размещаются в подпапке test:

// файл test/mymodule-test.js var assert = require('assert'); var mymodule = require('../mymodule'); describe('mymodule', function() < describe('#fun()', function() < it('должна приветствовать пользователя, имя которого передано как аргумент', function() < assert.equal(mymodule.fun('Сергей'), 'Привет, Сергей!'); >); >); >); 

Первый аргумент функции describe — это человекочитаемое описание поведения тестируемой функции или модуля, которое будет выводиться в консоль при прогоне тестов. Здесь желательно придерживаться некоторых структурных соглашений — например, в первом describe указывается имя модуля, во вложенном — имя тестируемой функции. Запустим mocha и убедимся, что тест нашей функции проходит:

> mocha mymodule #fun() ✓ должна приветствовать пользователя, имя которого передано как аргумент 1 passing (7ms) 
Использование Mocha в IntelliJ IDEA

Mocha также умеет мониторить исходники и автоматически прогонять тесты при изменении кода. Запустить её в таком режиме можно и из командной строки с помощью параметра запуска —watch, но раз уж мы строим наш рабочий процесс в IntelliJ IDEA, то используем для этого специальную конфигурацию запуска:

В окне настройки конфигурации запуска укажем название этой конфигурации (Name), а также путь к папке с тестами (Test directory). Сохраним конфигурацию.

Изменим код функции так, чтобы он не проходил, и выполним (Run) конфигурацию запуска Mocha.

Теперь щёлкнем кнопку Toggle auto-test в появившейся панели. Эта кнопка включает режим автоматического прогона тестов при изменении исходников.

Исправим код функции, при этом Mocha автоматически прогонит тест и покажет, что теперь всё хорошо:

Ресурсы
  • Документация по node.js — основной источник информации, хотя местами довольно лаконичный, и структурированный вокруг стандартных модулей.
  • Веб-репозиторий npm — поиск библиотек, информация о них.
  • Awesome List для node.js — незаменимый источник информации о проверенных библиотеках и решениях для разработки на node.js.
  • Практики использования node.js в продакшне — информационный портал компании Joyent, занимающейся поддержкой node.js.

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

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