【问题标题】:How can I run NPM without sudo?如何在没有 sudo 的情况下运行 NPM?
【发布时间】:2015-03-01 13:53:34
【问题描述】:

我一直在阅读帖子,试图弄清楚如何在没有sudo 的情况下运行npm install。我也看到了下面的文章,但我认为它是针对旧版本的 NPM 的。我做了以下产生较少错误的操作,但最后仍然抛出错误:

sudo chown -R $USER /usr/local

我不会出错的唯一方法是运行sudo npm install,但我读到这不是一个好主意。

下面是我运行后看到的结果。我的猜测是权限,但我真的不知道我应该 chown 哪些文件夹(如果有的话)。对不起,大量的数据,我真的不知道什么是相关的。我在日志中也看不到任何有用的东西(/var/www/budget/npm-debug.log),尽管它很大。有什么我还需要 chown 的吗?

$ npm install
npm WARN package.json budget@0.0.1 No description
npm WARN package.json budget@0.0.1 No repository field.
npm WARN package.json budget@0.0.1 No README data
npm http GET https://registry.npmjs.org/grunt-contrib-watch
npm http GET https://registry.npmjs.org/grunt-contrib-less
.
.
.
npm http 304 https://registry.npmjs.org/hawk/1.1.1
npm http GET https://registry.npmjs.org/delayed-stream/0.0.5
npm ERR! Error: ENOENT, chmod '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/bl/test/test.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /var/www/budget
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10
npm ERR! path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/bl/test/test.js
npm ERR! fstream_path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/bl/test/test.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! fstream_finish_call chmod
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:305:19
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid'
npm ERR! error rolling back  request@2.51.0 { [Error: ENOTEMPTY, rmdir '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid' }
npm WARN optional dep failed, continuing request@2.51.0
npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/lib/utils.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /var/www/budget
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10
npm ERR! path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/lib/utils.js
npm ERR! fstream_path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/lib/utils.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/util.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /var/www/budget
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10
npm ERR! path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/util.js
npm ERR! fstream_path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/util.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm http 304 https://registry.npmjs.org/delayed-stream/0.0.5
npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/tough-cookie/test.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /var/www/budget
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10
npm ERR! path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/tough-cookie/test.js
npm ERR! fstream_path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/tough-cookie/test.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
grunt-cache-breaker@1.0.1 node_modules/grunt-cache-breaker
└── cache-breaker@0.0.4 (lodash@2.2.1)

grunt-contrib-watch@0.5.3 node_modules/grunt-contrib-watch
├── tiny-lr@0.0.4 (debug@0.7.4, faye-websocket@0.4.4, noptify@0.0.3, qs@0.5.6)
└── gaze@0.4.3 (globule@0.1.0)

grunt@0.4.5 node_modules/grunt
├── which@1.0.8
├── dateformat@1.0.2-1.2.3
├── eventemitter2@0.4.14
├── getobject@0.1.0
├── rimraf@2.2.8
├── colors@0.6.2
├── hooker@0.2.3
├── async@0.1.22
├── grunt-legacy-util@0.2.0
├── exit@0.1.2
├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0)
├── lodash@0.9.2
├── coffee-script@1.3.3
├── underscore.string@2.2.1
├── iconv-lite@0.2.11
├── glob@3.1.21 (inherits@1.0.0, graceful-fs@1.2.3)
├── nopt@1.0.10 (abbrev@1.0.5)
├── findup-sync@0.1.3 (lodash@2.4.1, glob@3.2.11)
├── grunt-legacy-log@0.1.1 (underscore.string@2.3.3, lodash@2.4.1)
└── js-yaml@2.0.5 (argparse@0.1.16, esprima@1.0.4)

grunt-contrib-cssmin@0.10.0 node_modules/grunt-contrib-cssmin
├── chalk@0.4.0 (has-color@0.1.7, ansi-styles@1.0.0, strip-ansi@0.1.1)
├── clean-css@2.2.22 (commander@2.2.0)
└── maxmin@0.2.2 (figures@1.3.5, pretty-bytes@0.1.2, chalk@0.5.1, gzip-size@0.2.0)

grunt-contrib-less@0.7.0 node_modules/grunt-contrib-less
├── grunt-lib-contrib@0.6.1 (zlib-browserify@0.0.1)
└── less@1.4.2 (mime@1.2.11, mkdirp@0.3.5, ycssmin@1.0.1)
npm ERR! Error: Callback called more than once.
npm ERR!     at errorHandler (/usr/share/npm/lib/utils/error-handler.js:80:16)
npm ERR!     at save (/usr/share/npm/lib/install.js:329:12)
npm ERR!     at /usr/share/npm/lib/install.js:98:7
npm ERR!     at /usr/share/npm/lib/install.js:188:5
npm ERR!     at /usr/share/npm/node_modules/read-installed/read-installed.js:119:5
npm ERR!     at /usr/share/npm/node_modules/read-installed/read-installed.js:233:14
npm ERR!     at cb (/usr/lib/nodejs/slide/lib/async-map.js:48:11)
npm ERR!     at /usr/share/npm/node_modules/read-installed/read-installed.js:233:14
npm ERR!     at cb (/usr/lib/nodejs/slide/lib/async-map.js:48:11)
npm ERR!     at /usr/share/npm/node_modules/read-installed/read-installed.js:233:14
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /var/www/budget
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10
npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/mime-types/lib/mime.json'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /var/www/budget
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10
npm ERR! path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/mime-types/lib/mime.json
npm ERR! fstream_path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/mime-types/lib/mime.json
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR! Error: ENOENT, lstat '/var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/images/logo.png'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-40-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /var/www/budget
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10
npm ERR! path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/images/logo.png
npm ERR! fstream_path /var/www/budget/node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/images/logo.png
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/nodejs/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /var/www/budget/npm-debug.log
npm ERR! not ok code 0

【问题讨论】:

    标签: node.js ubuntu npm


    【解决方案1】:

    如果您想在不使用 sudo 的情况下运行 npm install -g protractor 之类的命令,则需要

    • 配置 NPM 以将包文件复制到并从不需要 sudo 权限的位置执行(我相信 Ubuntu 中唯一默认允许这样做的位置是 /home/user-name/
      .
    • 更新 BASH 在确定哪些脚本/程序可从命令提示符运行时查看的 $PATH 变量

    首先需要确定node当前配置在哪里安装全局包

    基于NPM official config docs - 以及其他各种来源
    运行:

    $ npm config get prefix
    

    $ npm config list
    

    或(显示所有配置默认值)

    $ npm config ls -l
    

    NPM 前缀值确定节点包的安装位置。

    换句话说,如果运行npm config list 的结果是这样的:

    ; userconfig /home/michael/.npmrc
    prefix = "/home/michael/npm"
    

    意思是

    • 你有一个用户级别的配置/home/michael/.npmrc,NPM 将解析 优先级高于全局/系统配置文件
    • 当你指定一个全局安装npm install -g protractor量角器文件将被安装到/home/michael/npm
    现在做出改变!

    直接使用 prefix 设置:

    npm config set prefix ~/npm
    

    将 NPM 包脚本文件放入 BASH 的路径中

    附加(编辑).bashrc 文件:

    export PATH="$PATH:$HOME/npm/bin"
    

    然后运行

    $ source .bashrc
    

    重新解析.bashrc 脚本

    【讨论】:

    • 搞定了,谢谢。我记得我必须为 RVM 做类似的事情,因为我已经有了 PATH=$PATH:$HOME/.rvm/bin。我的 .bashrc 文件现在有 PATH=$PATH:$HOME/.rvm/bin:$HOME/.npm/bin 并且我将前缀设置为“~/.npm”。
    • 太棒了,是的 ~/.npm 也是一个好方法 - 所以你在主路径中看不到 npm 文件夹
    【解决方案2】:

    从日志看来,您的应用程序存储在/var/www/budget 中,您将cwd 放入此目录并运行npm install。但是,此路径通常由 Apache 服务用户拥有(apachehttpd,不确定到底是哪一个,也可能取决于您使用的软件)。

    我不建议将此文件夹的所有权转让给您的用户帐户。但是,将您的用户帐户放入 apache 用户组并更改权限以使该组具有读/写访问权限(如果还没有)可能是完全可以的:

    (在执行之前确保该组确实是 apache,以免您将 r/w 权限授予其他组)

    sudo chmod -R g+r,g+w /var/www
    

    一般来说,您允许自己全局安装 npm 模块(到 /usr/local,带有 -g 标志),但您的应用程序不驻留在该目录中,因此您必须决定修改该特定应用程序路径的权限设置的最佳行动方案。

    【讨论】:

      【解决方案3】:

      在我看来最好的办法是使用版本管理器,例如nvmn。 这样您就可以安装不同版本的节点并轻松地在它们之间切换,并且可执行文件将存储在不同的 PATH 下,以防~/.nvm/v0.10.33/bin 中的 nvm,因此不再需要 sudo。

      【讨论】:

        【解决方案4】:

        一种冒险的方式,转到 /etc/sudoers 并在末尾添加这一行:

        USERNAME HOSTNAME = (root) NOPASSWD: /usr/bin/npm
        

        USERNAME - 不需要检查 sudo 权限的用户

        HOSTNAME - 您的计算机域名

        您在编辑 /etc/sudoers 时犯的任何错误都会使您的 sudo 命令停止工作,您需要使用 grub 模式来恢复您的 PC。

        【讨论】:

        • 谢谢,但这不只是将我的用户名设置为以 sudo 运行而不检查密码吗?我不想那样。我想设置它,以便我根本不需要 sudo 访问权限。
        猜你喜欢
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        • 2013-04-15
        • 1970-01-01
        相关资源
        最近更新 更多