node.js把它的文件放在哪里?

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

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

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

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

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

apt-get安装所有的软件,不仅仅是节点,在文件系统上遵循Ubuntu的约定,在那里存储二进制文件,man文件,共享文件,日志等。但是,使用apt-get,你将只有一定的版本节点由分发释放周期决定。 如果有更新可用,则将使用apt-get update; apt-get upgrade进行安装apt-get update; apt-get upgrade apt-get update; apt-get upgrade然而,某些应用程序的最新版本在进入发行版之前将不可用。 例如,在Ubuntu 13.10之前,节点v0.xy可能不可用,唯一的办法是手动安装。 apt-get或其他系统软件包pipe理器的好处在于它为您pipe理更新和软件包清除。 它将所有关于软件包的数据存储在自己的数据库中。 你总是可以用apt-get remove node ,就是这样。

make install手动安装包,但它被认为是有害的。 切勿使用make install主要是因为无法轻松删除软件包,您必须阅读Makefile并手动删除所安装的所有文件。 在你想使用make install的情况下, checkinstall总是可用的。 这是一个创build本地软件包并在系统中注册的软件。 当你决定删除软件包时,你可以用一个命令而不是许多命令来完成。 维基链接 ; 关于checkinstall的Ubuntu指南

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

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

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

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

因为nvm不是可执行文件。 这是一套bash函数,可以单独使用。 你可以调用nvm_lsnvm_ls_remote和其他没有主脚本后,是你的shell。 主脚本是如何parsing命令行参数的,并且在例如`nvm_ls_remote'的情况下输出。

在〜/ .profile中添加以下行

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

将所有的函数加载到你的shell中

我看到nvm可以安装不同版本的节点 – 为什么我要这样做呢? 我可以在本地安装,对吧?

您可以使用make installcheckinstall在本地安装它们,但是必须为它们创build别名,例如node_0.8.1,node_0.8.2,node_0.10.1等,并且您必须pipe理新的别名,安装所有软件包,删除他们如果你不需要他们自己。 这是一个单调乏味的任务,有时候可能会出错。 nvm免费为你完成所有这些任务。

您想要在不同版本的节点下testing您的应用程序。 例如,你很好,在v0.8下testing,但你想使用v0.10.3的新function,你怎么做? 您必须下载源代码,编译,制作别名并运行您的应用程序。 你可以用nvm install 0.10.3来做到这一点,并运行你的应用程序。 有时你必须支持多个版本的节点。 例如,某些托pipe环境与最新版本没有联系,只有v0.6您的使用您的服务器应用程序的客户端可能会遇到特定于此版本的错误。 当你修复这个bug时,你必须先重现它。 使用nvm安装nvm是一行半分钟。 你可以轻松地检查你想要的所有版本。 testing你的代码在不同的版本,并确保你很好去。

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用于发布你的代码和依赖pipe理。 如果您的应用需要其他人开发的其他应用,则可以通过npm发布。

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

考虑将nvm作为nvm更新pipe理器,将npm作为该系统应用程序的pipe理器。 那么,这个比较是不准确的,但刚刚出现在我的脑海里

navenvm基本相同,但它是一个可执行文件,而nvm是一个脚本源代码。 每个系统都有自己的好处。 您可以就使用情况和差异作出单独的问题。

我的回答不是100%完整,并包含很多主观的个人意见。 不过,我希望我至less能够更清楚一点,以便继续处理其他更具体的问题。 顺便说一句,你的这个问题清单可以作为单独的问题。 我相信当具体的问题被单独询问时,stackoverflow会给出最好的结果,更多的相关经验的人可以贡献。

如果你跑步

 npm install 

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

另外,npm默认安装打包本地。 为了安装globaly – 使用-g标志:

 npm install -g <package> 

执行下一个命令:

 npm config list 

你看到所有的npmconfiguration描述

你可以用你的应用程序的本地上下文来安装模块

npm install modulename

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

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

npm install -g modulename

在这种情况下,模块将通常在/ usr / local / bin / modulename中安装用于孔系统环境。

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