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