【问题标题】:Enable npm install -g for all users为所有用户启用 npm install -g
【发布时间】:2020-02-10 05:02:13
【问题描述】:

我正在尝试以一种方式安装节点,使所有用户都能够在没有 sudo 访问权限的情况下全局安装 npm 包。

通常,您可以在互联网上找到人们说您应该这样做:

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

当我尝试使用 npm 与另一个用户一起安装 pm2 时,我得到:

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 文件中吗?

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 避免同时提出多个不同的问题。请参阅How to Ask
  • 哼...问题其实都是相关的。这 4 点更多是关于验证我尝试的每一步。您是否有更准确的建议有助于改进问题?

标签: node.js npm


【解决方案1】:

好的。在我在网上找到的所有材料和我可以做的实验之后,我得出了以下结论。如果我错了,请随时纠正我。

  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'

总之,为所有用户启用 ̀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

【讨论】:

    猜你喜欢
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多