2013-05-10 66 views
11

我最近开始玩node.js,但是我迷失在一大堆不同版本的node,npm,nvm和其他软件包中。我不知道全局安装的东西以及本地安装的东西(如果是本地安装,那么包如何知道它们可以使用哪个版本的节点?)。node.js在哪里放置它的文件?

我想对不同的安装选项做一些总结。在具体的:

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

编辑:有很多的安装节点here的方式,这让我更糊涂了......

回答

16

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

apt-get的安装所有软件,不仅节点,Ubuntu的惯例在何处存储二进制文件,手册文件,共享文件,日志等。但是,使用下面的文件系统上的apt-get的你只有由分发发布周期确定的特定节点版本。如果有更新可用,它们将与apt-get update; apt-get upgrade一起安装。但是,某些应用程序的最新版本在进入发行版之前将不可用。例如,在Ubuntu 13.10之前,节点v0.x.y可能不可用,唯一的办法是手动安装它。 apt-get或其他系统软件包管理器的好处在于它可以为您管理更新和软件包删除。它将所有关于软件包的数据存储在自己的数据库中。您始终可以使用apt-get remove node删除节点,就是这样。

make install手动安装软件包,但它被认为是有害的。千万不要使用make install,主要是因为您无法轻松删除软件包,您必须阅读Makefile并手动删除它所安装的所有文件。在你想使用make install的情况下,总是有checkinstall可用。这是一个创建本地软件包并将其注册到系统的软件。当你决定删除软件包时,你可以用一个命令而不是许多命令来完成。 wiki link; Ubuntu guide on checkinstall

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

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

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

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

因为nvm不是可执行文件。它是一套bash函数,它们来自shell,可以单独使用。在源代码进入你的shell之后,你可以调用nvm_lsnvm_ls_remote以及其他没有主脚本的程序。主脚本是如何分析命令行参数的,并在例如`nvm_ls_remote'的情况下显示输出。

中〜/。配置文件中的以下行添加

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

加载所有功能集成到你的shell

我看到NVM可以安装不同版本的节点彼此一起 - 我为什么要这么做?我可以在本地安装,对吧?

您可以在本地进行安装使用make installcheckinstall,但你将不得不作出别名他们像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您的使用您的服务器应用程序的客户端可能会遇到特定于此版本的错误。当你修复错误时,你必须先重现它。使用nvm安装v0.6是一行半分钟。你可以轻松地检查你想要的所有版本。在不同版本下测试你的代码,并确保你很好去。

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

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

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

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

npm,nvm和nave有什么区别?

npmnode package manager - >link它包含由其他人开发的用户空间包。这些软件包不是节点核心的一部分。npm用于发布代码和依赖关系管理。如果您的应用需要其他人开发的其他应用,则通过npm发布它很方便。

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

考虑将nvm作为操作系统的更新管理器,将npm作为此系统的应用程序的管理器。那么,这种比较是不准确的,但刚刚在我的脑海

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

我的回答并非100%完整,并包含很多主观的个人意见。但是,我希望至少我会更清楚一点,以便继续处理其他更具体的问题。顺便说一下,你的这个问题清单可以作为单独的问题提出。我相信当单独询问具体问题时,stackoverflow会给出最佳结果,并且有相关经验的更多人员可以提供帮助。

+0

这是一个很好的答案,谢谢!我问了很多问题,因为我感到困惑;当我有一些具体的问题时,我会单独提问。 – mik01aj 2013-05-10 12:49:27

+0

非常有帮助的回答!对OP提出的所有选择都非常好的看法。 – Qcom 2015-05-12 08:18:50

3

如果您在folser运行

npm install 

用的package.json,它安装localy的所有软件包(在当前文件夹中)。

此外,npm默认安装打包本地。对于globaly安装 - 使用-g标志:

npm install -g <package> 

执行下一个命令:

npm config list 

你看到所有NPM配置描述

+0

但是“全局”究竟意味着什么呢?关于“本地”相同 - 我认为它使用'node_modules'文件夹,但我不知道它是如何fint这个文件夹。 – mik01aj 2013-05-10 10:11:00

+0

扩展答案,在本地上尝试 – Eugene 2013-05-10 12:11:06

+3

本地意味着软件包安装在您运行'npm install ''的同一文件夹中的'node_modules'文件夹中。全球意味着它将在系统级安装并随处可用。 – 2013-05-10 12:22:42

1

你可以在你的应用程序与本地环境安装模块

npm install modulename

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

否则,您可以在全球范围内与

npm install -g modulename

安装模块在这种情况下,模块将被安装通常位于/ usr/local/bin目录/ MODULENAME孔系统环境。

全局安装对于您在多个应用程序中需要的模块(如express或node-inspector)非常有用。