Запустите npm от имени суперпользователя, это не очень хорошая идея?
Я получаю ошибки с npm
при попытке установить / обновить пакеты без прав SU в Linux.
Самый простой способ решить проблему - выполнить sudo npm install <package>
, но я не уверен, что это хорошая идея.
Лучший способ - стать владельцем .npm
папку, как я нашел в вопросах Stackru и сообщениях в блоге.
Мой вопрос: зачем бегать npm
как SU это не очень хорошая идея?
1 ответ
Бег npm
как суперпользователь рискует запустить некоторый ненадежный код как суперпользователь, который потенциально может испортить всю вашу систему. Бег npm
поскольку непривилегированный пользователь рискует запустить этот код с меньшими привилегиями, он не сможет связываться со всей системой - только с вашими собственными файлами (что может быть одинаково плохо, в зависимости от того, как вы на это смотрите).
Что я часто делаю и рекомендую, так это установить Node в свой домашний каталог, а не глобально в системе, если это ваш собственный компьютер. Таким образом, вам не нужно бегать с sudo
или же su
за npm
или даже для make install
самого узла.
Я запускаю множество версий Node, которые я компилирую из исходников, иногда с разными ключами, и я использую соглашение для установки Node в версионных каталогах, либо глобально в /opt
(но тогда тебе нужно sudo
) или локально в моем домашнем каталоге в ~/opt
,
Я делаю это так:
wget https://nodejs.org/dist/v7.1.0/node-v7.1.0.tar.gz
tar xzvf node-v7.1.0.tar.gz
cd node-v7.1.0
./configure --prefix=$HOME/opt/node-v7.1.0
make && make test && make install
Затем я создаю символическую ссылку ~/opt/node
указывая на ~/opt/node-v7.1.0
и я имею:
PATH="$HOME/opt/node/bin:$PATH"
в моем .profile
или же .bashrc
,
Таким образом, мне не нужно запускать как суперпользователь для установки Node или для запуска npm.
В качестве бонуса я могу быстро переключить свою версию Node по умолчанию, просто изменив символическую ссылку, и в любое время я могу запустить любую другую версию, если я изменю PATH или запусту Node с полным путем, например ~/opt/node-v7.0.0/bin/node
,
Я объяснил этот процесс установки более подробно в других моих ответах:
- узел 5.5.0 уже установлен, но узел -v выбирает "v4.2.1" в OS X и homebrew?
- NodeJS API с внешними депами на другом языке
Я не хочу вдаваться в подробности, так как этот ответ о том, почему npm
как суперпользователь не очень хорошая идея - этот процесс установки является лишь одним решением, чтобы не запускаться npm
как суперпользователь.
Другие варианты установки разрешений npm, чтобы избежать работы в качестве суперпользователя, описаны в разделе Исправление разрешений npm в документах npm (спасибо RyanZim за то, что он указал это в комментариях).