如何在Unix服务器上安装Node.js和NPM,以便用户不需要sudo来安装或读取全局包?

这真的是非常罕见的情况,我无法在任何地方find答案吗? 无论如何。 我在DigitalOcean上有一个Ubuntu VM服务器,我正在这台服务器上运行Jenkins,以构build,testing和本地部署一个Web应用程序(主要是将Web应用程序目录复制到其他位置并重新启动运行它的systemctl服务)。

问题是jenkins在系统中生成的用户(你不能用btwlogin),不知何故弄乱了节点模块目录。 它被安装在jenkins主文件夹/var/lib/jenkins/ ,执行npm install (尽pipe没有-g选项),而不是从应用程序内部生成部署目录和包parsing,无法parsing安装在jenkins主目录中的模块(尽pipe由jenkins运行,所以jenkins用户)。

我怀疑解决办法是允许以某种方式pipe理节点安装,这样每个用户都可以安装和需要全局模块而不需要使用sudo ,但是到目前为止,我查找的每个解决scheme(nvm,n-install,各种脚本)是单用户,或sudo。 我真的不能对jenkins(或任何其他程序生成的)用户做任何事情。 那么这种情况下最好的解决scheme是什么?

看起来确实是非常罕见的情况,根据没有任何活动来判断。 无论如何,我现在的解决scheme是将node.js安装包含到我的Jenkins文件的pipe道中,并使用sh命令运行。 安装脚本如下所示:

 #!/usr/bin/env bash command_exists () { command -v $1 >/dev/null 2>&1 } if command_exists 'node' && command_exists 'npm'; then echo 'Node installed, exiting' exit 0 else if [ -d $HOME/n ]; then echo 'n-install directory exists, path likely not configured, exiting' exit 0 fi echo 'Node not installed, installing' curl -L https://git.io/n-install | bash -s -- -y echo 'Reloading bashrc' . $HOME/.bashrc if command_exists 'node' && command_exists 'npm'; then echo 'Node installed successfully. Updating npm' npm i -g npm echo 'Node version:' node -v echo 'NPM version:' npm -v echo 'NPM prefix:' npm config get prefix exit 0 else echo 'Node installation failed!' exit 1 fi fi 

当然,这并不理想,因为它实际上并没有安装node.js,并为每个用户提供,但是每个用户都有私有的npm存储库,所以他们不需要sudo来安装或读取它们。 因此,我必须另外确保systemd服务用来运行应用程序的用户也安装了node.js,我必须手动执行此操作。

如果有人有更好的解决办法,告诉我。 如果没有更好的performance出来,我会把这个标记为答案。