2012-02-07 56 views
5

我即將用node.js做一個大型項目,目前嘗試對幾件事情進行排序。使用node.js npm和git的最佳工作流程

在早期的節點項目中,我使用了所有節點模塊的額外文件夾。此文件夾是由git的忽略,我通過git的子模塊,這是不容易的託管版本和更新

我所尋找的是(沒有依賴關係,更新到新版本並不總是有趣的。):

npm install packagename
npm dump_modules_into_file

所以其他人誰是參與這個項目可以做:

npm install_or_update_modules_from_file

我不想讓我的git存儲庫跟蹤node_modules。基本上我想要類似於symonfy2如何處理它的東西bundles

P.S .:我知道npm submodule packagename,但這個命令不是很有幫助,因爲它不安裝依賴關係,它不更新模塊。 P.2:我準備好了package.json,但這也有一些缺陷。 (沒有參數,你必須手動更新模塊版本。)

+1

你是什麼意思「'package.json'沒有參數?」 – 2012-02-08 02:31:04

+0

例如:要使用native C++解析器安裝mongodb,您需要執行:'npm install mongodb --mongodb:native'。在使用'package.json'時,我還沒有想出如何將這個本地部分傳遞給npm。 – TheHippo 2012-02-08 11:39:47

回答

6

package.json將完成您正在尋找的東西。在關於傳遞--mongodb:native標誌的註釋中,該標誌是npm命令的參數,確實是在您自己的項目中使用package.json時可以工作。 mongodb軟件包有一個「安裝腳本」,用於在節點處理環境中查找該標誌。如果該標誌存在,那麼它會產生另一個構建過程。所以,如果你已經在你的package.json

{ 
    "name": "MyProject" 
    , "description": "Test" 
    , "version": "0.0.1" 
    , "dependencies": { 
     "mongodb": "*" 
    } 
} 

運行npm install --mongodb:native工作的MongoDB作爲一個依賴。

關於「手工更新」 - 這只是第一次,它可能需要一段時間,我相信你可以寫一個腳本來生成它,如果有很多的依賴關係。然而,這聽起來像你有一個相當大的團隊,如果是這樣的話,那麼自動化更新到package.json將變得非常醜陋(認爲新的開發人員,實驗功能等)。)在這部分開發週期中對破壞版本負責不一定是一個壞主意。

參考文獻:

編輯:和尼克提到,加入 'node_modules' 目錄.gitignore將阻止任何這些文件被檢入您的回購

+0

感謝參數傳遞給npm的參數!我將在一個bash腳本或一個Makefile中包含npm命令,我們很樂意去... – TheHippo 2012-02-20 17:55:09

+0

http://npmjs.org/doc/shrinkwrap.html本來可以幫到的。 – TheHippo 2012-02-27 06:02:39

2

Afaik,唯一的包管理方法是你描述的,儘管我不確定你對wrt package.json不感興趣。

如果您想嚴格控制您使用的模塊版本,您可以明確指定版本號。您也可以使用>=X.X.X方法自動獲取最新的(超過閾值),這對於開發目的而言有時是很好的。

這讓你的隊友做的事:

npm install . 

這將安裝的package.json文件中列出的所有依賴關係。這些將安裝到./node_modules,但您可以.gitignore,如您所述。

6

她e是一篇很好的文章,可以解釋何時應該檢查node_modules到git中。可以回答你的問題。

node_modules in git

+1

更喜歡http:// npmjs .org/doc/shrinkwrap.html – 2012-03-14 16:47:40

+0

這是值得讀的既給文章和鏈接關於node-shrinkwrap – 2013-01-24 17:18:40

0

爲了全面測試封裝配置,並確保模塊的表現爲他們將最終部署我現在使用下面的過程。它完全避免了需要破解你的node_module目錄或require()代碼,所以當你去部署它時只是作品

對於內部項目或預發佈到GitHub上您可能還需要設置"private": truepackage.json所以npm將拒絕予以發表。

  1. 創建Git版本控制下的項目目錄,並添加所有節點模塊的子目錄。子目錄名稱必須與其軟件包名稱匹配。如果您正在使用github,那麼您將需要爲每個模塊目錄創建一個單獨的git repo。他們可以在你的項目回購中使用git submodules。將node_module添加到您的.gitignore文件中。

  2. 安裝像npm-server這樣的工具並在項目目錄中運行它。然後將npm註冊表設置爲localhost,所以現在npm將與您本地的npm服務器通信以獲取軟件包。它會發現它將發送的子目錄。任何它沒有發現它將代理registry.npmjs.org $ npm set registry http://localhost:6070/ $ cd ~/projects $ npm-server

  3. 啓動一個新的外殼,創建一個單獨的sandbox目錄 $ mkdir sandbox $ cd sandbox

  4. 使用本地註冊服務器將應用程序安裝。清除本地npm緩存並重新安裝您的應用程序。我在一行上做這個,所以很容易通過shell重做。你可能想編寫它。

    $ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app

  5. 測試您的應用程序:

    $ app ....

  6. 註銷當您完成安裝本地NPM註冊表:

    $ npm set registry http://registry.npmjs.org:80/

  7. 一旦你完成測試你可以發佈是你的應用程序,並停止npm-server重新測試部署。

$ cd ~/projects $ npm publish app


而不是註冊&註銷的服務器,你可以只使用本地主機服務器進行一次性的安裝: $ npm --registry=http://localhost:6070/ install app


我在編寫npm-server分叉版本的過程,所以你只需要: $ npmsvr on // Registers local registry server $ npmsvr start // Start local registry server $ npmsvr off // Deregisters local registry server

+0

我剛剛發佈npmmsvr到npm註冊表,使這個任務更容易。 https://www.npmjs.org/package/npmsvr – 2014-07-30 05:27:44

+0

請注意,這個版本只是'npm'和'npm-server'的一個小前端,所以你仍然需要安裝'npm-server' – 2014-07-30 05:33:27