Npm/yoman установить генератор angular без sudo

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

npm install -g generator-angular

Я получаю:

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

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

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

Ответ 1

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

yo

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

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

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

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

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

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

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

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

Ответ 2

Благодаря @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

Ответ 3

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

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

Ответ 4

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

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

Команда поиска файлов rougue.yo-rc.json

sudo find / -name .yo-rc.json

Ответ 5

Из yoeman начало страницы появляется команда:

yo doctor

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

Ответ 6

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

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

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

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

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

prefix=${HOME}/.npm-packages

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

Вставьте этот фрагмент в свой .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

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