1

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

我正在按照这些说明安装 Ghost 博客系统(使用 NodeJS 构建的系统)。

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

在新的终端选项卡类型中npm install --production

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

  1. 从 Internet 获取包

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

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

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

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

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

  • --productionflag 对 NPM 的行为有什么影响?

很高兴有具体的答案,或者一个元答案,指出我可以在哪里学习如何npm使用(看起来是)应用程序安装(相对于系统安装,这是我通常的想法)

4

2 回答 2

2

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

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

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

于 2014-02-04T20:05:23.610 回答
1

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

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

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

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

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

只安装dependencies不带devDependenciesfrom 的package.json,意思是“给我运行这个应用程序所需的东西,但我不打算在这个应用程序上做开发,所以我不需要开发专用的东西”。

npmjs.org 有一些文档、常见问题解答和手册页,虽然它们大多缺乏基本的介绍性材料,但它们都非常好。

于 2014-02-04T20:21:55.980 回答