【问题标题】:npm install vs sudo npm install -gnpm install vs sudo npm install -g
【发布时间】:2013-12-14 09:00:09
【问题描述】:

对于某些包,我必须运行 sudo npm install -g,而对于其他包,npm install 就足够了。

为什么和有什么区别?

例如:

npm install -g grunt-cli  # doesn't work
sudo npm install -g grunt-cli  # works
npm install websocket-stream # works

sudo 是否必须仅与 -g 标志一起使用?

【问题讨论】:

    标签: javascript node.js npm sudo


    【解决方案1】:

    npm 在本地安装包,即。在当前文件夹内的 node_modules 文件夹中。这允许您的应用程序依赖于特定的软件包版本,而不必弄乱系统上已安装软件包的全局列表。请参阅Isaac's blog post 的第一段(同时处理同一事物的多个版本),它很好地解释了npm 如何避免在其他编程生态系统中经常遇到的依赖地狱。

    另一方面,某些软件包旨在用作命令行实用程序,例如grunt-climochajson。为了在任何地方使用它们,您需要全局安装它们,因此需要 -g 参数。

    请注意,您不需要sudo 来安装全局包,请参阅this relevant answer 了解更多信息。

    【讨论】:

    • 在 Ubuntu 上,如果当前目录下没有 package.json 文件,运行 npm install somemodule 会将 sommodule 安装到 ~/.npm 而不是 ./node_modules
    • @Paul Mougel 好吧,我们不应该使用 sudo 安装全局包,所以它不应该抛出错误......
    【解决方案2】:

    看起来像是权限问题。 -g 全局安装(你需要'root'),但以root身份安装它不是一个好主意 在终端运行中:

    sudo chown -R `whoami` ~/.npm
    

    【讨论】:

      【解决方案3】:

      npm install -g grunt-cli 以全局模式安装软件包,每个用户都可以使用它。 如果没有-g,您只需将其安装在当前目录中。 如果你不是 root 用户,你需要使用sudo 来代替-g。 如果您使用 npm 而不使用 -g 并且您对当前目录具有写入权限,则 sudo 不是必需的。否则,你仍然需要它。

      【讨论】:

        【解决方案4】:

        -g 是全局的,不只是在本地安装包。

        您使用 sudo 运行它,因为它会安装到您的默认用户默认可能无权访问的文件夹中。

        【讨论】:

          【解决方案5】:

          grunt-cli 将提供一个可执行文件,该可执行文件将放入您的PATH,因此根据您配置系统的方式,它需要 root 访问权限。
          请参阅this post from npm creator,尤其是关于在 npm 中使用 sudo 的部分。

          websocket-stream 是一个库,您的代码将使用它,以便执行一些任务更容易,通常它会安装在您项目的根目录中,在 node_modules 文件夹中。

          【讨论】:

            猜你喜欢
            • 2021-05-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-14
            • 2017-06-07
            • 2017-01-28
            • 1970-01-01
            相关资源
            最近更新 更多