【问题标题】: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 以简化我们的任务。