Включить npm install -g для всех пользователей - PullRequest
0 голосов
/ 08 февраля 2020

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

Обычно вы можете найти в inte rnet людей, говорящих, что вы должен сделать:

npm config set prefix $HOME/.npm-packages

Однако $ HOME хорош только для одного пользователя.

Поэтому я пошел с этим кодом:

# Install node
sudo apt install -y curl
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install -y nodejs
# Set node global packages folder as /usr/local/lib/node_modules
NPM_PACKAGES="/usr/local/lib/node_modules"
sudo mkdir -p $NPM_PACKAGES
sudo chmod 777 $NPM_PACKAGES
npm config set prefix $NPM_PACKAGES
# Update the path and manpath to read from npm packages
echo "export PATH="\""\$PATH:$NPM_PACKAGES/bin"\""
export MANPATH="\""\${MANPATH-\$(manpath)}:$NPM_PACKAGES/share/man"\" | sudo tee '/etc/profile.d/node-path.sh'
source /etc/profile.d/node-path.sh

Когда я пытаюсь установить pm2 с npm с другим пользователем, я получаю:

npm ERR! code EACCES
npm ERR! syscall symlink
npm ERR! path ../lib/node_modules/pm2/bin/pm2
npm ERR! dest /usr/bin/pm2
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules/pm2/bin/pm2' -> '/usr/bin/pm2'

Очевидно, я должен выполнить npm config set prefix $NPM_PACKAGES для каждого пользователя.

Итак, у меня 4 вопроса:

  1. Является ли этот подход правильным для того, чего я пытаюсь достичь?
  2. Является ли /usr/local/lib/node_modules хорошим выбором для пакетов npm или есть лучшее место?
  3. есть ли способ npm config set prefix один раз и для всех пользователей?
  4. Если нет, я должен добавить это в файл /etc/profile.d/node-path.sh?

1 Ответ

0 голосов
/ 09 февраля 2020

Хорошо. После всех материалов, которые я мог найти в Интернете, и экспериментаторов, которых я мог сделать, я пришел к следующему выводу. Если я ошибаюсь, поправьте меня.

  1. Это действительно правильный способ включить npm install -g для всех пользователей и поделиться установленными библиотеками

  2. /usr/local/lib/node_modules - это цель, которую я обнаружил большую часть времени в смежных темах, даже если это не совсем то же самое.

  3. Я не мог найти что-нибудь о настройке npm config set prefix для всех пользователей. Действительно, есть команда npm config --global, но, похоже, она не работает в этом случае. Но, может быть, я что-то упустил.

  4. В итоге я добавил эту строку в /etc/profile.d/node-path.sh, и она работает. Если кто-то считает, что это неправильный способ сделать это, пожалуйста, прокомментируйте.

В конце концов, именно так я и создаю node-path.sh:

# Update the path and manpath to read from npm packages
echo "export PATH="\""\$PATH:$NPM_PACKAGES/bin"\""
export MANPATH="\""\${MANPATH-\$(manpath)}:$NPM_PACKAGES/share/man"\""
npm config set prefix $NPM_PACKAGES" | sudo tee '/etc/profile.d/node-path.sh'

В заключение, правильный способ включить 10 npm install -g` для всех пользователей:

# Install node
sudo apt install -y curl
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install -y nodejs
# Set node global packages folder as /usr/local/lib/node_modules
NPM_PACKAGES="/usr/local/lib/node_modules"
sudo mkdir -p $NPM_PACKAGES
sudo chmod 777 $NPM_PACKAGES
# Update the path and manpath to read from npm packages
echo "export PATH="\""\$PATH:$NPM_PACKAGES/bin"\""
export MANPATH="\""\${MANPATH-\$(manpath)}:$NPM_PACKAGES/share/man"\""
npm config set prefix $NPM_PACKAGES" | sudo tee '/etc/profile.d/node-path.sh'
source /etc/profile.d/node-path.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...