Модули NPM не будут устанавливаться глобально без sudo

Я только что переустановил Ubuntu 12.04 LTS, и прежде всего я сделал эти шаги:

  1. установленный узел через Диспетчер пакетов со следующим скриптом

    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
    
  2. попытался установить генераторы yeoman, express, n, yeoman по всему миру, и все они вернули ту же ошибку

    НПМ ERR! Ошибка: EACCES, symlink '../ lib/node_modules/n/bin / n'

    НПМ ERR! { [Ошибка: EACCES, symlink '../lib/node_modules/n/bin / n'] errno: 3, код: 'EACCES', путь: '../ lib / node_modules/n/bin / n' }

    НПМ ERR!

    НПМ ERR! Попробуйте снова запустить эту команду как root / Administrator.

    НПМ ERR! Система Linux 3.8.0-29-generic и

    НПМ ERR! команда "/ usr / bin / node" "/usr/bin/npm" "установить" "- g" "- d" "n"

    НПМ ERR! cwd / главная / heberlz

    НПМ ERR! узел-v v0.10.20

    НПМ ERR! npm-v 1.3.11

    НПМ ERR! путь../ lib/node_modules/n/bin / n

    НПМ ERR! код значение eacces

    НПМ ERR! errno 3

    НПМ ERR! ошибка стека: EACCES, symlink '../ lib/node_modules/n/bin / n'

    НПМ ERR!

    НПМ ERR! Дополнительные сведения о регистрации можно найти в:

    НПМ ERR! / home/heberlz / npm-отладка.log

    НПМ ERR! не ок код 0

  3. рекурсивно восстановлено право собственности на следующие папки ~/.npm, / usr/lib /node,/usr/lib /node_modules и следующих символических ссылок/usr/bin /node,/usr/bin / nodejs абсолютно без успеха

Мне нужно установить yeoman и его генераторы без sudo, чтобы не быть в беде позже: (

13 ответов


Ubuntu 12.04 и использование PPA Криса Леа для установки следующих работ для меня:

npm config set prefix '~/.npm-packages'

и добавление $HOME/.npm-пакеты / bin to $PATH

добавить .bashrc

export 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/local

EDIT:

существуют определенные проблемы безопасности и ограничения функциональности в отношении изменения владельца /usr / local на текущий пользователь:

сказав это, если вы хотите установить глобальный модуль без использования sudo, я не вижу никаких лучшее решение (с прагматической точки зрения), чем упомянутые. Security vs easy of use-очень широкая тема, и на нее нет простого ответа - это зависит только от ваших требований.


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

моим решением было переустановить узле таким образом:

загрузить последние стабильные источники узлов из nodejs.org #в моем случае node-v0.10.20.смола.gz

узел tar-zxf-v0.10.20.смола.ГЗ #распаковать источники

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 - G bower

установка npm-G grunt

установка npm - g yo

npm install-g генератор-угловой


Я решил эту проблему с помощью переменной среды и оболочки псевдоним:

export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"

для меня npm не соблюдал настройку конфигурации "prefix".npmrc.


согласно этому аналогичному сообщению SO:npm выдает ошибку без sudo

похоже, у вас может быть проблема с владением


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

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

в любом случае, я бы рекомендовал проверка этого ответа на stackoverflow


на самом деле, я только что изменил разрешение папки пользователя, которая принадлежала root:

sudo chown -R $USER ~/.config/configstore

тогда я мог бы "npm install" и "bower install" без sudo! Сработало отлично!


найдите путь к каталогу npm:

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 how to Установить Узел.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

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

это установит Nodejs под ~/.местные/ вместо /usr/местные/

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 by running

chown -R user:user ~/.local/

теперь вы должны быть хороши для установки пакетов через 'npm'

Примечание: все вышеперечисленные команды должны выполняться как пользователь. НЕ ИСПОЛЬЗУЙТЕ SUDO ИЛИ ROOT LOGIN

НИКОГДА НЕ ИЗМЕНЯЙТЕ РАЗРЕШЕНИЕ ПАПОК В РАЗДЕЛЕ " / USR/LIB/". ПРИВЕДЕТ К НЕСТАБИЛЬНОЙ ОС