есть ли виртуальная среда для node.js?

134

Я искал страницу модулей вики, но не могу найти ничего похожего на virtualenv (python) или rvm.

Кто-нибудь здесь разделяет node.js в своем собственном env? Мне действительно не нравится устанавливать npm в масштабе всей системы.

Frangossauro
источник

Ответы:

44

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

Это супер просто. Просто создайте файл package.json:

{ "name": "yourapp", "version": "0.0.1", "dependencies": {"jade": "0.4.1"}}

а затем запустите:

npm bundle vendor

или если ваша версия npm> = 1.0, запустите:

npm install

заморозить в каталоге поставщиков. а затем используйте:

require.paths.unshift('./vendor');
bxjx
источник
1
@andho Сам не тестировал, но я понимаю, что последние версии NPM просто используют npm installдля этого.
Marnen Laibow-Koser
13
Протестировано и подтверждено сейчас. я полагаю, npm installзаменен npm bundleс NPM 1.0.
Марнен Лайбоу-Козер
184

nodeenv - виртуальная среда для node.js (аналог virtualenv )

shorrty
источник
Поначалу это выглядело великолепно, но мне не удалось выполнить установку npm с помощью nodeenv одновременно с компиляцией node.js (на osx Lion). Вероятно, я мог бы просто использовать nvm install и установить npm отдельно для каждого nodeenv ... к тому времени, когда я подумал о том, чтобы попробовать это, у меня было несколько версий node, уже выполненных с помощью других средств.
Микаэль Леписто,
2
Может использоваться для установки в существующей виртуальной среде Python, чтобы node.jsсреда активировалась вместе со средой Python. См nodeenv -p.
naitsirhc 01
3
nodeenv (на самом деле virtualenv + nodeenv) также подходит для пользователей fish-shell, поскольку nave и другие не поддерживают никакие другие оболочки, кроме bash и zsh.
akarca
1
Есть ли для него эквивалент виртуальной оболочки?
vmonteco
25

Также могут помочь некоторые системы управления версиями Node.

Проверьте Nave https://github.com/isaacs/nave

NVM также может быть использован https://github.com/creationix/nvm

Существует также один называется n https://github.com/visionmedia/n

Эпели
источник
1
Nvm прекрасно работает, если вы просто хотите, чтобы различные версии node.js и npm были установлены одновременно. В остальном я обнаружил, что достаточно установить необходимые модули в каталог проекта с помощью npm.
Микаэль Леписто,
2
Если вы смотрите nvmили nхотите автоматическое переключение при смене директорий, посмотрите на avn: github.com/wbyoung/avn
wbyoung
1
Насколько я понимаю, это не виртуальная среда. Он разделяет все глобально установленные библиотеки, но npm.
Янник Хаманн
7

Ответ bxjx концептуально точен. Однако обратите внимание, что команда bundle больше не принимает каталог. Он всегда помещает пакеты в node_modulesпапку, чтобы npm знал, где их найти позже (и может избежать двойной установки зависимостей).

Любое решение, вероятно, будет включать установку npm и nave «в масштабе всей системы» (т. Е. В вашей PATH, которая может быть ~где-то), а затем только установку ваших конкретных зависимостей в виртуальной среде.

Я более подробно ответил на проблему с github .

tl; dr: вариант использования действителен и полезен, и хотя он в основном существует, он не так хорошо обслуживается, как мог бы. Мы должны обязательно продумать это и сделать это правильно.

Айзекс
источник
Проблема с GitHub, похоже, больше не существует. Есть ли обновленная ссылка?
Drazisil,
4

Вам не всегда нужно устанавливать зависимости глобально. Обычно это рекомендуется, потому что тогда вы можете использовать команды, предоставляемые пакетами npm, но если вы установите его локально (в node_modules) каталоге, вы также можете использовать эти команды, они только заканчиваются в node_modules/.bin/каталоге, поэтому вам нужно будет ввести node_modules/.bin/<command>, что раздражает, но вы, конечно, можете добавить этот путь к PATHпеременной окружения:

export PATH=node_modules/.bin:$PATH

Тогда вы можете просто ввести, <command>и это работает!

На самом деле есть команда npm, которая возвращает абсолютный путь к .binкаталогу:

$ npm bin
/path/to/node_modules/.bin

Эта команда также работает, когда вы находитесь в подкаталоге проекта, она вернет первый node_modules/.binкаталог, который она найдет в своих родительских каталогах.

Вы можете добавить этот псевдоним в свой, .bashrcчтобы автоматически добавить .bin/каталог в свой PATH:

alias nodebin='export PATH=$(npm bin):$PATH'

Поэтому, когда вы находитесь в каталоге проекта, который имеет node_modules/каталог в корне, вы можете ввести, nodebinа затем использовать все команды, которые находятся в .bin/каталоге!

gitaarik
источник