Модули NPM не будут устанавливаться глобально без sudo
Я только что переустановил Ubuntu 12.04 LTS, и прежде чем что-либо еще я сделал эти шаги:
установленный узел через Диспетчер пакетов со следующим скриптом
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
попытался установить генераторы yeoman, express, n, yeoman глобально, и все они вернули ту же ошибку
npm ERR! Ошибка: EACCES, symlink '../lib / node_modules/n / bin / n'
npm ERR! { [Ошибка: EACCES, symlink '..в /lib/node_modules, в/Н/ОГРН/ц'] Ошибка: 3, код: 'значение eacces' путь: '../lib / node_modules/n / bin / n' }
npm ERR!
npm ERR! Попробуйте снова запустить эту команду от имени root / Administrator.
npm ERR! Система Linux 3.8.0-29-generic и
npm ERR! команда "/usr/bin / node" "/usr/bin/npm" "install" "- g" "- d" "n"
npm ERR! cwd / home / heberlz
npm ERR! узел -в версии v0.10.20
npm ERR! npm-v 1.3.11
npm ERR! путь../lib / node_modules/n / bin / n
npm ERR! код EACCES
npm ERR! errno 3
npm ERR! ошибка стека: EACCES, symlink '../lib / node_modules/n / bin / n'
npm ERR!
npm ERR! Дополнительные сведения о регистрации можно найти в:
npm ERR! /home/heberlz / npm-отладка.журнал
npm ERR! не ок код 0
рекурсивно восстановлено право собственности на следующие папки~/.НПМ, в /usr/lib в/узла, в /usr/lib в/node_modules, в и следующие символические ссылки в /usr/Бен/узел, /usr/Бен/nodejs абсолютно без успеха
Мне нужно установить yeoman и его генераторы без sudo, чтобы не быть в беде позже: (
13 ответов:
Ubuntu 12.04 и использование PPA Криса Леа для установки следующих работ для меня:
npm config set prefix '~/.npm-packages'и добавление $HOME/.npm-packages/bin to $PATH
добавить
.bashrcexport PATH="$PATH:$HOME/.npm-packages/bin"см.https://stackoverflow.com/a/18277225 от @passy
если у вас уже есть
$HOME/binна вашем пути, более простое решение просто ...npm config set prefix ~
- новые команды узла теперь будут установлены в ваш
по состоянию на октябрь 2014 года:
узел.js доступен из двоичных дистрибутивов Nodesource Debian и Ubuntu хранилище.
curl -sL https://deb.nodesource.com/setup | sudo bash - sudo apt-get install -y nodejsвот именно.
устаревший ответ:
самый быстрый способ без использования sudo, как описано здесь Исааком
я настоятельно рекомендую вам не делать управление пакетами с sudo! Пакеты могут запускать произвольные скрипты, которые делает sudoing пакет команда менеджера так же безопасна, как стрижка бензопилой. Конечно, это быстро и определенно собирается прорезать любые препятствия, но вы можете на самом деле хочу, чтобы это препятствие осталось там.
Я рекомендую сделать это один раз вместо:
sudo chown -R $USER /usr/localEDIT:
существуют определенные проблемы безопасности и ограничения функциональности, связанные с изменением владельца /usr / local на текущий пользователь:
- если на машине есть другой пользователь, который может использовать глобальные пакеты npm - не меняйте владельца /usr / local
- https://apple.stackexchange.com/questions/1393/are-my-permissions-for-usr-local-correct
- https://askubuntu.com/questions/261326/is-it-safe-to-chown-usr-local
сказав это, если вы хотите установить глобальный модуль без использования sudo, я не вижу никаких лучшее решение (с прагматической точки зрения), чем упомянутые. Безопасность против простоты использования-это очень широкая тема, и на нее нет простого ответа - это просто зависит от ваших требований.
проблема была установлена узел с помощью sudo, чтобы избежать ошибок при установке модулей npm глобально, никогда не следует устанавливать узел с sudo.
мое решение было переустановить узле таким образом:
скачать последние стабильные источники узлов из nodejs.org #в моем случае узел-v0. 10.20.смола.ГЗ
узел tar-zxf-v0. 10.20.смола.gz #распаковать исходники
cd node-v0.10. 20 #введите несжатую папку
sudo chown-R $USER / usr / local
./configure --prefix= / usr / local & & make && make install
следует отметить, что в моем случае не будет работать только владение папкой /usr/local, потому что сама установка узла была выполнена с помощью sudo
последний шаг для установки yeoman: #хотя на yeoman.io в нем говорится, что выполнение "npm install-g yo" уже устанавливает bower и grunt, есть некоторые подмодули ворчать, что не получится, поэтому я исправил это, установив его сам по себе
npm install-g bower
npm install-g grunt
npm install-g yo
npm install-g generator-angular
Я решил эту проблему с переменной окружения и псевдоним оболочки:
export NPM_PREFIX=$HOME/node alias npmg="npm -g --prefix $NPM_PREFIX"для меня npm не соблюдал настройку конфигурации "префикс".npmrc.
согласно этому аналогичному сообщению SO:npm выдает ошибку без sudo
похоже, у вас может быть проблема с владением
Если вы находитесь на машине для разработки, вам может быть лучше рассмотреть возможность использования nvm.
Если нет, вы просто хотите установить с помощью вашего любимого менеджера пакетов.
в любом случае, я бы рекомендовал проверка этого ответа на stackoverflow
на самом деле, я только что изменил разрешение папки пользователя, которая принадлежала root:
sudo chown -R $USER ~/.config/configstoreтогда я мог бы " npm install "и" bower install " без sudo! Работал отлично!
найти путь к каталогу НПМ:
npm config get prefixдля многих систем это будет /usr / local.
измените владельца каталогов npm на имя текущего пользователя (ваше имя пользователя!):
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}это изменяет разрешения подпапок, используемых npm и некоторыми другими инструментами (lib/node_modules, bin и share).
вот ссылка для полного подробности
https://docs.npmjs.com/getting-started/fixing-npm-permissions
используя lubuntu 14.04.3, я попытался сменить владельца .npm и префикс npm, обновил мой путь, npm установил модули в мой домашний каталог без sudo, но путь был неправильным, поэтому модули, такие как ember, не были найдены, linuxbew решена проблема, руководство по быстрой установке здесь для узла / npm
эта проблема и другие, вызванные той же причиной, могут быть решены установкой узла в пользовательском пространстве.
вы можете сделать это просто копируя и вставляя в свой терминал
NODEJS_ROOT=${NODEJS_ROOT:-~/nodejs} cd /tmp wget -N http://nodejs.org/dist/node-latest.tar.gz && tar xzf node-latest.tar.gz NODEJS_CURRENT=$(tar tf node-latest.tar.gz|head -1) mkdir -p $NODEJS_ROOT/$NODEJS_CURRENT cd $NODEJS_CURRENT ./configure --prefix=$NODEJS_ROOT/$NODEJS_CURRENT && make install cd $NODEJS_ROOT rm current 2> /dev/null # Removes current symbolic link, if any ln -s $NODEJS_CURRENT currentте же команды могут быть запущены также, чтобы получить узел обновлен до последней версии.
Не забудьте отредактировать свою среду. Только один раз, сделай
echo "export NODEJS_ROOT=$NODEJS_ROOT" >> $HOME/.bash_profile echo 'export PATH=$NODEJS_ROOT/current/bin:$PATH' >> $HOME/.bash_profile source $HOME/.bash_profile # reload your env, so you can use node right nowознакомьтесь с этой статьей, Как reabout как Установить Узел.js без sudo.
для более общее решение по этому вопросу (т. е. локальная установка программного обеспечения) см. dotsoftware.
найти Павел Grzybek это очень убедительно: они сводятся к 3 простым командам sudo, никогда не используя sudo снова для глобальных установок npm:
sudo chown -R $(whoami) /usr/local/lib/node_modules sudo chown -R $(whoami) /usr/local/bin sudo chown -R $(whoami) /usr/local/share
лучшее решение, которое я нашел, было установить узел.js из пакета tar в домашний каталог пользователя и свяжите расположение папки lib. Вот что вам нужно сделать
это установит Nodejs под ~/.local / вместо стандартного / usr / local/
Add this to your ~/.npmrc (create the file if it doesn't exist already): root = /home/YOUR-USERNAME/.local/lib/node_modules binroot = /home/YOUR-USERNAME/.local/bin manroot = /home/YOUR-USERNAME/.local/share/man Download the Nodejs source code from nodejs.org and install it under your ~/.local tree: tar xf node...... cd node........ ./configure --prefix=~/.local make make install Create ~/.node_modules symlink. (This directory will be automatically searched when you load modules using require "module" in scripts. I'm not sure why Node doesn't search ~/.local/lib/node_modules by default.) cd ln -s .local/lib/node_modules .node_modules Is ~/.local/bin in your path? Type which npm If it says ~/.local/bin/npm, you're done. Otherwise, do this... export PATH=$HOME/.local/bin:$PATH ...and add that line to your ~/.profile file, so it'll run every time you log in.Если вы все еще сталкиваетесь с ошибкой владения или разрешения при установке пакетов, измените владение ~/.local/ dir, запустив
chown -R user:user ~/.local/теперь вы должны быть хороши для установки пакетов через 'npm'
Примечание: все вышеперечисленные команды должны выполняться от имени пользователя. НЕ ИСПОЛЬЗУЙТЕ SUDO ИЛИ ROOT LOGIN
НИКОГДА НЕ ИЗМЕНЯЙТЕ РАЗРЕШЕНИЕ ПАПОК В РАЗДЕЛЕ ' / USR/LIB/'. ПРИВЕДЕТ К НЕСТАБИЛЬНОЙ ОС
Comments