node.js把文件放在哪里?

时间:2013-05-10 10:00:01

标签: node.js package npm directory-structure

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

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

  • 当我使用nvmapt-getmake install或使用其他方式时,节点安装在哪里?
  • 在本地安装节点是个好主意吗?
  • 为什么nvm会更改我的~/.profile,而不是将其自身安装在系统可识别的bin文件夹中?
  • 我看到nvm可以同时安装不同版本的节点 - 为什么我要这样做?我可以在本地安装它们,对吗?
  • npm在哪里安装软件包?我看到它检查了包的aganist版本的Node,当节点升级时这些包会发生什么?
  • 在哪些情况下最好使用全局或本地安装?那么我应该把我的包放在哪里(默认放在哪里?)
  • npmnvmnave之间的区别是什么?
编辑:有很多方法可以安装节点here,这让我更加困惑......

3 个答案:

答案 0 :(得分:17)

  

当我使用nvm,apt-get,make install或者何时安装节点时   用其他方法?

apt-get在文件系统上安装所有软件,不仅仅是节点,遵循Ubuntu约定存储二进制文件,man文件,共享文件,日志等等。但是,使用apt-get你将拥有仅由分发版本周期确定的特定版本的节点。如果有可用的更新,它们将与apt-get update; apt-get upgrade一起安装。但是,某个应用程序的最新版本将无法使用,直到它进入发行版。例如,节点v0.x.y可能在Ubuntu 13.10之前不可用,唯一的方法是手动安装它。 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进行开发,并从生产中的源代码安装。但是,如果有人能够进一步解释这个问题,我会很高兴了解更多。

  

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

因为nvm不是可执行文件。它是一组bash函数,由shell提供,可以单独使用。在将源代码发送到shell之后,您可以在没有主脚本的情况下调用nvm_lsnvm_ls_remote以及其他人。主脚本的作用是解析命令行参数,并在例如`nvm_ls_remote'的情况下打印输出。

在〜/ .profile中添加以下行

[[ -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。使用您的服务器应用程序的客户端可能会遇到此版本特有的错误。当你修复bug时,你必须先重现它。使用nvm安装v0.6是一行半分钟。您可以轻松地检查所需的所有版本。在不同版本下测试您的代码,并确保您不错。

  

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

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

  

在哪些情况下最好使用全局或本地安装?我应该把我的包装放在哪里(默认情况下放在哪里?)

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

  

npm,nvm和nave之间有什么区别?

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

nvmnode version manager,它完全独立。它使您能够在同一台计算机上轻松切换节点版本,并管理$PATH环境变量中的所有更改。

nvm视为操作系统的更新管理器,将npm视为此系统的应用程序管理器。嗯,这个比较并不准确但只是出现在我脑海中

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

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

答案 1 :(得分:4)

如果你跑

npm install

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

此外,npm默认安装打包本地。要将其安装为globaly - 请使用-g标志:

npm install -g <package>

执行下一个命令:

npm config list

您会看到所有npm配置说明。

答案 2 :(得分:1)

您可以使用

在应用程序的本地环境中安装模块

npm install modulename

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

否则,您可以使用

在全局上下文中安装模块

npm install -g modulename

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

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