Модули 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 глобально, и все они вернули ту же ошибку




    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




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



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

938   13  

13 ответов:

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

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

и добавление $HOME/.npm-packages/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, я не вижу никаких лучшее решение (с прагматической точки зрения), чем упомянутые. Безопасность против простоты использования-это очень широкая тема, и на нее нет простого ответа - это просто зависит от ваших требований.

проблема была установлена узел с помощью 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

    Ничего не найдено.