15

我最近开始玩 node.js,但我迷失在不同版本的 node、npm、nvm 和其他包的混乱中。我不知道全局安装了什么以及本地安装了什么(如果在本地,包如何知道它们可以使用哪些版本的节点?)。

我想总结一下不同安装选项的作用。具体来说:

  • 当我使用 , 或使用其他方式时,节点安装nvm在哪里apt-getmake install
  • 在本地安装节点是个好主意吗?
  • 为什么要nvm更改我的~/.profile而不是将其自身安装在某些系统可识别的bin文件夹中?
  • 我看到nvm可以同时安装不同版本的节点——我为什么要这样做?我可以在本地安装它们,对吗?
  • 在哪里npm安装软件包?我看到它检查包 aganist 版本的 Node,升级 node 时这些包会发生什么?
  • 在什么情况下使用全局或本地安装更好?那么我应该把我的包裹放在哪里(以及它们默认放在哪里?)
  • npmnvm和有什么区别nave

编辑:这里有很多安装节点的方法,这让我更加困惑......

4

3 回答 3

20

当我使用 nvm、apt-get、make install 或使用其他方式时,节点安装在哪里?

apt-get 按照 Ubuntu 约定在文件系统上安装所有软件,而不仅仅是节点,在其中存储二进制文件、man 文件、共享文件、日志等。但是,使用 apt-get 你将只有特定版本的节点由分发发布周期决定。如果有可用的更新,它们将与它们一起安装。apt-get update; apt-get upgrade但是,某些应用程序的最新版本在进入分发版之前将不可用。例如 node v0.xy 可能在 Ubuntu 13.10 之前不可用,唯一的获取方法是手动安装它。或其他系统包管理器的好处apt-get是它为您管理更新和包删除。它将有关软件包的所有数据存储在自己的数据库中。您可以随时删除节点,apt-get remove node仅此而已。

make install手动安装软件包,但它被认为是有害的。永远不要使用,make install主要是因为您无法轻松删除软件包,您必须阅读 Makefile 并手动删除它安装的所有文件。在您想使用的情况下,make install始终checkinstall可用。它是一个创建本机包并将其注册到系统的软件。当您决定删除包时,您可以使用一个命令而不是多个命令来执行此操作。维基链接检查安装的 Ubuntu 指南

现在nvm脚本是一个node version manager. 它非常有用且易于使用。它允许您在您的机器上并行安装和使用多个版本的节点。它不会像make install这样从源代码编译节点,所以速度非常快。它不依赖于您的分发发布周期,因此您可以访问目前可用的所有节点版本。nvm 下载预编译的二进制文件,非常适合一般用途。它将节点文件存储在本地自己的文件夹中,因此如果您想比较不同节点版本之间的内容,很容易做到。

在本地安装节点是个好主意吗?

如果本地是指使用,nvm那么它非常适合开发和测试。不确定从源代码安装或使用nvm预编译的二进制文件之间的生产性能影响和好处。我使用 nvm 进行开发并在生产中从源代码安装。但是,如果有人可以进一步解释这个问题,我会很高兴了解更多。

为什么 nvm 会更改我的 ~/.profile 而不是将自身安装在某些系统可识别的 bin 文件夹中?

因为nvm不是可执行文件。它是一组由 shell 提供的 bash 函数,可以单独使用。在将 is 引入 shell 之后,您可以在没有主脚本的情况下调用nvm_lsand和其他脚本。nvm_ls_remote主脚本的作用是解析命令行参数并漂亮地打印输出,以防例如“nvm_ls_remote”。

在 ~/.profile 中添加了以下行

[[ -s /home/USERNAME/.nvm/nvm.sh ]] && . /home/USERANME/.nvm/nvm.sh # This loads NVM 

将所有功能加载到您的外壳中

我看到 nvm 可以同时安装不同版本的节点——我为什么要这样做?我可以在本地安装它们,对吗?

make install您可以使用或在本地安装它们,checkinstall但您必须为它们创建别名,例如 node_0.8.1、node_0.8.2、node_0.10.1 等。并且您必须管理新别名,安装所有软件包,删除它们以防万一你自己不需要它们。这是一项乏味而无聊的任务,有时可能容易出错。nvm免费为您完成所有这些任务。

您想这样做以在不同版本的节点下测试您的应用程序。比如你很好,在v0.8下测试过但是你想使用v0.10.3的新特性你怎么做?您必须下载源代码、编译、创建别名并运行您的应用程序。你可以这样做nvm install 0.10.3并运行你的应用程序。有时您必须支持多个版本的节点。例如,一些托管环境没有与最新版本保持联系,并且只有 v0.6 使用您的服务器应用程序的客户端可能会遇到特定于该版本的错误。当您修复错误时,您必须先重现它。使用nvmv0.6的安装是一行半分钟。您可以通过这种方式轻松检查所需的所有版本。在不同版本下测试您的代码,并确保一切顺利。

npm 在哪里安装包?我看到它检查包 aganist 版本的 Node,升级 node 时这些包会发生什么?

如果您使用nvm的是全局安装的包,则-g选项绑定到相关的节点版本。当您在版本之间切换时,nvm use 0.x您必须再次安装软件包或使用nvm copy-packages <version>当前版本中的软件包。如果软件包安装在本地,则取决于。package.json应包含有关应用程序依赖项的信息。如果它显示 node: '0.8' 而你刚刚更新到 0.9,你可能会遇到麻烦。例如,process.nextTick与 0.6 相比,最新版本中的行为发生了变化。所以要小心。

在什么情况下使用全局或本地安装更好?那么我应该把我的包裹放在哪里(以及它们默认放在哪里?)

这取决于。在我看来,发展nvm是优越的。对我来说,它既方便又简单。对于生产,使用未针对您的系统优化的预编译二进制文件时可能会对性能产生一些影响。最好将此作为一个单独的问题提出,以便有相关经验的人可以回答。

npm、nvm 和 nave 有什么区别?

npm是一个 node package manager->链接它包含其他人开发的用户空间包。这些包不是节点核心的一部分。npm 用于发布你的代码和依赖管理。如果您的应用程序需要其他人开发的其他应用程序,则可以方便地通过 npm 发布它。

nvm是一个node version manager它做一个完全独立的事情。$PATH它使您能够非常轻松地在同一台机器上的节点版本之间切换并管理环境变量中的所有更改。

考虑nvm作为操作系统的更新管理器和npm该系统的应用程序的管理器。嗯,这个比较并不精确,但我突然想到了

nave基本上相同,nvm但它是一个可执行文件,而它是一个nvm来自 shell 的脚本。每个系统都有它自己的好处。您可以就其用例和差异提出单独的问题。

我的回答不是 100% 完整,包含很多主观的个人意见。但是,我希望我至少可以更清楚地说明一些观点,以便您可以继续处理其他更具体的问题。顺便说一句,您的这个问题列表可以作为单独的问题提出。我相信当单独提出特定问题并且更多具有相关经验的人可以做出贡献时,stackoverflow 会提供最佳结果。

于 2013-05-10T11:58:04.410 回答
4

如果你跑

npm install

在带有 package.json 的文件夹中,它会在本地安装所有包(在当前文件夹中)。

此外,npm 默认安装包本地。要在全球范围内安装它 - 使用-g标志:

npm install -g <package>

执行下一条命令:

npm config list

你会看到所有的 npm 配置描述。

于 2013-05-10T10:05:17.177 回答
1

您可以在应用程序的本地上下文中安装模块

npm install modulename

在这种情况下,模块将安装到应用程序的 node_modules 文件夹中。

否则,您可以在全局上下文中安装模块

npm install -g modulename

在这种情况下,通常会在 /usr/local/bin/modulename 为hole 系统环境安装模块。

全局安装对于您在多个应用程序中需要的模块很有意义,例如 express 或 node-inspector。

于 2013-05-10T10:30:52.710 回答