没有sudo,NPM模块将不会全局安装

我刚刚重新安装了Ubuntu 12.04 LTS,在执行其他任何操作之前,我都执行了以下步骤

  • 通过包管理器使用以下脚本安装节点

    sudo apt-get update
    
    sudo apt-get install python-software-properties python g++ make
    
    sudo add-apt-repository ppa:chris-lea/node.js
    
    sudo apt-get update
    
    sudo apt-get install nodejs
    
  • 试图在全球安装yeoman,express,n,yeoman的生成器,并且它们都返回了相同的错误

    npm ERR! 错误:EACCES,符号链接'../lib/node_modules/n/bin/n'

    npm ERR! {[Error:EACCES,symlink'../lib/node_modules/n/bin/n'] errno:3,code:'EACCES',path:'../lib/node_modules/n/bin/n'}

    npm ERR!

    npm ERR! 请尝试以root / Administrator身份再次运行此命令。

    npm ERR! 系统Linux 3.8.0-29-通用

    npm ERR! 命令“/ usr / bin / node”“/ usr / bin / npm”“install”“-g”“-d”“n”

    npm ERR! cwd / home / heberlz

    npm ERR! 节点-v v0.10.20

    npm ERR! npm -v 1.3.11

    npm ERR! 路径../lib/node_modules/n/bin/n

    npm ERR! 代码EACCES

    npm ERR! errno 3

    npm ERR! 堆栈错误:EACCES,符号链接'../lib/node_modules/n/bin/n'

    npm ERR!

    npm ERR! 其他日志记录详细信息可以在

    npm ERR! /home/heberlz/npm-debug.log

    npm ERR! 不好的代码0

  • 回收以下文件夹的所有权 - 〜/ .npm,/ usr / lib / node,/ usr / lib / node_modules以及以下符号链接/ usr / bin / node,/ usr / bin / nodejs ,绝对没有成功

  • 我需要安装yeoman和它的发电机没有sudo不会在后来遇到麻烦:(


    Ubuntu 12.04并使用Chris Lea的PPA为我安装以下作品:

    npm config set prefix '~/.npm-packages'
    

    并将$ HOME / .npm-packages / bin添加到$ PATH中

    附加到.bashrc

    export PATH="$PATH:$HOME/.npm-packages/bin"
    

    请参阅@passy的https://stackoverflow.com/a/18277225


    如果您的路径中已经有$HOME/bin ,则更简单的解决方案就是......

    npm config set prefix ~
    
  • 新节点命令现在将安装到您的$HOME/bin目录中。
  • 不需要改变你的路径!
  • 由于这个讨论确实是为了减少运行sudo的安全风险,因此您应该了解,任何节点应用程序都可能会安装与您认为要安装的注册节点程序包名称不匹配的应用程序名称。 所以存在一个安全风险,即npm install会替换现有的系统命令或您已经在$HOME/bin存在的命令。 如果您担心,请先检查您正在安装的应用程序的package.json文件中的binscripts属性。

    一般来说,最安全的做法是:

  • (a)将$HOME/bin放在您的路径中,以便系统命令不会被取代。
  • (b)不包括“。” 或$PATH任何相对路径,所以你不会意外地运行恰好在当前目录中的命令。
  • 参考:

  • package.json属性
  • npm安装
  • NodeJS安全漏洞:nodesecurity.io。

  • 截至2014年10月:

    Node.js可以从NodeSource Debian和Ubuntu二进制发行版库中获得。

    curl -sL https://deb.nodesource.com/setup | sudo bash -
    sudo apt-get install -y nodejs
    

    而已。

    过时的回答:

    不使用sudo的最快捷方式就像isaac在这里描述的一样

    我强烈建议你不要使用sudo做包管理! 软件包可以运行任意脚本,这使得包管理器命令与链锯理发一样安全。 当然,这是快速的,绝对要克服任何障碍,但是你可能真的想让这个障碍留在那里。

    我建议这样做一次:

    sudo chown -R $USER /usr/local
    

    编辑:

    有关将/ usr / local的所有权更改为当前用户的某些安全问题和功能限制:

  • 如果机器上有另一个用户可以使用全局npm包 - 请不要更改/ usr / local的所有权
  • https://apple.stackexchange.com/questions/1393/are-my-permissions-for-usr-local-correct
  • https://askubuntu.com/questions/261326/is-it-safe-to-chown-usr-local
  • 话虽如此,如果你想在不使用sudo的情况下安装全局模块,我没有看到比提到的更好的解决方案(从实用的角度)。 安全与易用性是非常广泛的话题,并且没有简单的答案 - 它只取决于您的要求。

    链接地址: http://www.djcxy.com/p/27691.html

    上一篇: NPM modules won't install globally without sudo

    下一篇: Where does npm install packages?