【问题标题】:npm install command - please explainnpm install 命令 - 请解释一下
【发布时间】:2017-11-20 05:01:35
【问题描述】:

我开始学习 React Native,我对 npm 包管理器非常陌生。我读到 npm 可以在本地或全局安装包,但我试图理解这是什么意思。 我正在阅读此页面https://docs.npmjs.com/getting-started/installing-npm-packages-locally,请有人向我解释一下这是什么意思。

如果你想使用 Node.js 之类的 require 依赖于你自己模块中的包,那么你想在本地安装,这是 npm install 的默认行为。另一方面,如果你想将它用作命令行工具,比如 grunt CLI,那么你需要全局安装它。

由于我对 npm、React Native、Node(从未使用过)非常陌生,因此我对这句话的第一句话感到困惑。 “我自己的模块”是什么意思?

如果我想使用 CRNA,我想我必须全局安装它?

如果我要安装一个包,比如本地或全局 CRNA,我在哪里可以看到它安装在我的 MacBook Pro 上?

【问题讨论】:

    标签: node.js react-native npm


    【解决方案1】:

    本地安装和全局安装的区别在于,本地安装将其放入项目的node_modules 目录(这就是所谓的“您自己的模块”),而全局将其放入系统目录(确切位置取决于您的操作系统,在 OSX 上应该是 /usr/local/lib/node_modules)。

    基本上:

    • 本地安装将已安装的模块绑定到您的项目:您计算机上的其他项目无法获取它,但如果您的项目被复制到另一台计算机,该模块也将安装在那里

    • 全局安装将它绑定到您的计算机:您可以在所有 您的项目在您的计算机上,但如果您的项目被复制到 另一台计算机安装的模块将不存在

    是的,CRNA 应该全局安装,因为它是一个通用工具,而不是项目的库依赖。

    【讨论】:

      【解决方案2】:

      当您全局安装包时,npm install -g <package name> 模块会放入 {prefix}/lib/node_modules

      本地 - npm install <package name> - 将包放在当前工作目录中。

      如果您要在项目中使用require 模块,则必须在本地安装它。

      如果你想从命令行运行,你需要全局安装它。

      如果您需要更多扩展说明take a look

      【讨论】:

        【解决方案3】:

        由于我对 npm、React Native、Node(从未使用过)非常陌生,因此我对这句话的第一句话感到困惑。 “我自己的模块”是什么意思?

        如果您有package.json 文件,则同一文件夹中的所有内容都被视为“模块”。您可以通过 npm install --save foo 向其添加依赖项(--save 选项将其添加到您的 package.json 中的 dependencies 下)。

        如果我想使用 CRNA,我想我必须全局安装它?

        不确定“CRNA”是什么。但一般规则是大多数东西(库......)都安装在本地。这意味着它们被添加到您的package.json 并安装在node_modules 下的同一文件夹中。

        仅当您想要全局安装某些东西时(可以添加到package.json,但未安装在node_modules 下的同一文件夹中,但可能在您的主目录中),通过执​​行npm install --global bar--global 安装它在全球范围内)。当工具(不是库)独立于项目时,您可以从任何地方访问它。类似create-react-app


        TLDR:

        • 本地是安装在同一文件夹中的依赖项(库),并且(通常)作为依赖项添加到您的package.json
        • 全局是安装在您的用户主文件夹中的工具,并且(通常)不会作为依赖项添加到您的package.json 中。

        【讨论】:

          【解决方案4】:

          让我们先从nodejs如何找到包开始。

          假设你有一些文件夹结构,比如-

          root
              -pixel
                 -project1
                 -project2
          

          因此,如果您正在处理 project1 并需要一些 npm 包,nodejs 会尝试在当前目录中查找名为 node_modules 的文件夹。如果失败,它会进入父级(像素文件夹)并尝试找到node_modules 并递归地到达根目录(这是全局的)。

          因此,如果全局安装了任何软件包,则无需将其安装在当前工作目录中。

          那么,我们为什么不全局安装所有软件包呢?是不是节省了我们的硬盘内存?

          是的,没错。但是由于 npm 包每次都在更新和更改其版本,因此有必要在当前工作包中使用特定包以避免串通。

          那么全局包有什么用呢? 最好安装一些 cli 包以直接从命令行运行,即 webpack 以简化我们的任务。

          【讨论】:

            猜你喜欢
            • 2015-01-15
            • 2013-10-12
            • 1970-01-01
            • 2021-06-05
            • 2020-04-30
            • 2016-02-08
            • 2020-06-05
            • 2017-12-19
            • 1970-01-01
            相关资源
            最近更新 更多