npm / yeoman установить генератор-угловой без sudo

Я попытался установить генератор-angularjs, используя Yo ( Yoeman) без sudo:

npm install -g generator-angular

Я получил:

Error: EACCES, mkdir '/usr/lib/node_modules/generator-angular'

Когда я набираю sudo yoЙо говорит мне, что я не должен использовать sudo (что вполне понятно).

у меня есть ~/node_modules каталог - почему вы не устанавливаете свои пакеты там?

6 ответов

Решение

Генераторы предназначены для установки во всем мире. В противном случае вам всегда нужно устанавливать генератор, который вы собираетесь использовать в каждом проекте, что излишне болезненно. Кроме того, вы не можете увидеть прекрасные yo Меню, в котором перечислены все доступные генераторы (если, конечно, вы не установите их все локально):

Эй

Настройка npm для глобальной установки

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

Я лично не люблю устанавливать свои пользовательские пакеты в глобальные /usr/ папка. /usr/ для программного обеспечения, которое используется всеми пользователями компьютера. Даже если он использует только компьютер, все же есть веские причины уважать то, как устроена иерархия файловой системы Unix. Например, если вы решили в какой-то момент стереть весь ваш узел установки.

Мой предпочтительный способ включения npm устанавливать пакеты глобально, не нарушая$HOME это установить префикс локального узла. Это так же просто, как бег

echo 'prefix = ~/.node' >> ~/.npmrc

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

export PATH="$PATH:$HOME/.node/bin"

на ваш ~/.bashrc, После этого вы можете счастливо бежать npm install -g generator-angular без sudo, не сталкиваясь с конфликтами разрешений и если что-то полностью сломано, и вы хотите начать с нуля, все, что вам нужно сделать, это удалить свой ~/.node каталог.

Благодаря @passy мне удалось наконец-то заставить это работать на Ubuntu 13.04 (на случай, если у кого-то возникнут похожие проблемы с настройкой) со следующим:

sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

пытаюсь запустить:

npm install -g yo

привело к

Error: EACCES, mkdir '/usr/lib/node_modules/yo'

Исправлено с помощью:

echo prefix = ~/.node >> ~/.npmrc
echo 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc 
. ~/.bashrc

Бег:

yo webapp

привело к:

Error: EACCES, permission denied '/home/username/.config/configstore/update-notifier-yo.yml'

Исправлено с помощью:

sudo chown yourusername:yourusername /home/yourusername/.config/configstore/update-notifier-yo.yml

На стартовой странице yoeman появляется команда:

yo doctor

В моем случае $NODE_PATH (который в моем случае, Ubuntu 14.04, определен в /etc/profile.d) не совпадает с корнем npm. Добавление в корень npm в $ NODE_PATH решит проблему.

Я пытался получить yeoman играть хорошо с моим vagrant коробка и вот что мне нужно было сделать чтобы установить npm пакеты по всему миру без sudo на ubuntu:

1. Создайте каталог для хранения глобальных пакетов

$ mkdir "${HOME}/.npm-packages"

2. Скажите npm где разместить любые пакеты, установленные глобально

Вставьте этот фрагмент в свой ~/.npmrc файл:

prefix=${HOME}/.npm-packages

3. Убедитесь, что npm можно найти установленный binaries и так далее

Вставьте этот фрагмент в свой .bashrc/.zshrc:

NPM_PACKAGES="${HOME}/.npm-packages"

PATH="$NPM_PACKAGES/bin:$PATH"

// `unset` `manpath` to allow inheritance from `/etc/manpath` with
// the `manpath` command
unset MANPATH // remove this line if you have previously modified `manpath`
export MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

4. Запустите следующий или перезапустите терминал

$ source ~/.bashrc

Надеюсь, это поможет любому, кто окажется в подобной ситуации.

У меня была почти идентичная ошибка с участием мошенника .yo-rc.json файл в моем корневом каталоге из проекта, который я установил ранее. Yeoman переключал cwd из установочного каталога в корневой каталог в середине установки, но выводил только ошибку разрешений EACCESS без каких-либо подробностей, что каталог установки был /, Потребовались годы, чтобы выяснить, почему это произошло, и потребовалась отладка из источника Yeoman, но я в конечном итоге узнал, что Yeoman будет просматривать дерево каталогов, пока не найдет .yo-rc.jsonи сгенерируйте там код, вызвав chdir в новом месте.

Yeoman следует проверить, что у пользователя есть права на запись в каталог. В качестве альтернативы, он может указать в выводе, что cwd изменился, или вывести имя установочного каталога, если он найдет .yo-rc.json отличается от cwd.

Команда для поиска мошеннических файлов.yo-rc.json

sudo find / -name .yo-rc.json

Привет в моем случае (на Ubuntu 12.04), добавление префикса в ~/.npmrc ничего не изменило.

если это так, соберите пакет узла самостоятельно и установите его в /opt/node или /home/user/.node.

Другие вопросы по тегам