2013-05-10 96 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)非常有用。