【问题标题】:NPM basics and Local Installs?NPM 基础知识和本地安装?
【发布时间】:2014-02-04 19:11:56
【问题描述】:

我不是普通的节点用户,所以如果这是一个愚蠢的新手问题,我深表歉意,但我无法找到任何明确的文档,而且我微弱的新手节点技能不让我深入研究我。

我正在关注 these instructions 安装 Ghost 博客系统(一个使用 NodeJS 构建的系统)。

告诉我在刚刚下载的包文件夹中打开一个终端窗口后,你的指令包括以下行

在新的终端选项卡中输入npm install --production

这让我很困惑。我对npm的理解是它是一个包管理器,就像p​​erl的CPAN

  1. 从 Internet 获取包

  2. 将它们安装到我的本地节点系统中

这显然不是上面发生的事情,但我不知道当我运行该命令时 正在发生什么,而且由于我没有与 NodeJS 人群一起运行,所以我不知道该找谁问。

我想知道 NPM 在做什么。具体问题

  • 当我运行npm install 时,它看起来正在下载许多包(控制台中有很多npm http GET)。 NPM 怎么知道要下载什么?

  • 将这些模块文件下载到哪里? npm 怎么知道下载文件的位置?

  • --production 标志对 NPM 的行为有什么影响?

很高兴有具体的答案,或者一个元答案,指出我可以在哪里了解npm 如何与(看起来是)应用程序安装(与系统安装相比,这是我通常想到的)它)

【问题讨论】:

  • 第二点,如果我正确解释了npm 在我的系统上的行为,它将在您的当前目录中创建一个node_modules 目录,它将安装您指定的模块(有助于本地构建,而不会污染您机器上的全局安装)。如果您包含-g 标志,那么它将将模块安装在“全局”位置(这将取决于操作系统)。

标签: node.js npm ghost-blog


【解决方案1】:

npm 有几种不同的安装模式。从模块内(带有package.json 文件)npm install 安装package.json 文件的dependenciesdevDependencies 字段中列出的依赖项。安装意味着下载模块的文件,放在node_modules 文件夹中,然后是npm installed 本身,(但只有它们的dependencies)将模块放置在它们自己的node_modules 文件夹中。这一直持续到安装所需的一切。使用npm ls 查看已安装包的树。

大多数时候这就是你想要的,因为在模块内运行 npm install 是你在模块上开发时会做的事情,你会想要运行测试等(这就是 devDependencies 是为)。

虽然有时您会编写一个使用模块的服务,但不一定要将其视为一个(不打算成为require'd)。 Ghost就是这样一个例子。在这些情况下,您需要npm install --production,它只安装dependencies,留下devDependencies

【讨论】:

  • 我不想把这个放在答案中以避免混淆水域......子模块有效地安装了npm install --production
【解决方案2】:

当我运行 npm install 时,它看起来像是在下载一些 包(控制台中有很多 npm http GET)。 NPM 怎么知道什么 下载?

它读取当前目录下的package.json配置文件。

将这些模块文件下载到哪里? npm 怎么知道下载文件的位置?

它将在当前目录中创建并填充node_modules 目录。文件结构设计在 npm/node 中,并且(大部分)故意不可配置。

--production 标志对 NPM 的行为有什么影响?

只安装dependencies 而不安装package.json 中的devDependencies,意思是“给我运行这个应用程序所需的东西,但我不打算在这个应用程序上进行开发,所以我不需要开发- 只有东西”。

npmjs.org has some docs, FAQ, and man pages,虽然大多缺乏基本的介绍材料,但还不错。

【讨论】: