2013-04-26 34 views
2

我有一個nodejs項目,在我自己的模塊上有一些依賴關係。根據npm當前的最佳實踐,這些依賴關係使用npm link/npm link $package-name命令表示,因此該項目現在在其node_modules中有一些符號鏈接。本地工作。nodejs,github,npm和符號鏈接

然而,當我將該項目推送到github時,鏈接被保留爲鏈接,這意味着克隆它的其他人將(很可能)看到斷開的鏈接。另一點是,我將node_modules目錄推送到github - 至此,從github克隆現在爲您提供了一個項目的完整實例,並解決了所有依賴關係,但另一方面,我突然有很多第三方的東西在我的回購。

處理這種情況的最佳做法是什麼?

編輯我剛剛意識到的一件事是,檢查依賴關係,因爲安裝的代碼無論如何都是錯誤的 - 可能有一些二進制文件需要以平臺特定的方式安裝。所以你從不檢查你的依賴關係?

回答

2

請勿在您的源代碼庫中包含node_modules目錄。 Git用於源代碼,未構建發行版。這是數十年來的最佳做法。忽略你偶爾看到的時髦人物將構建工件放入git中。他們錯了,他們只是沒有感受到足夠的痛苦,還沒有意識到這一點。除了從一個合理的方法學角度來看不正確之外,當你的項目包含任何帶有每個平臺編譯的C組件的擴展時,包括你在git中的node_modules將會失敗。這將會失敗,需要克隆回購站的用戶至少修改npm rebuild,並且在那一點上,您可能只需要npm install就可以用$Deity

2

首先,不要在您的Git項目的其他節點模塊

cd ~/your_module && echo "/node_modules" >> .gitignore 

其次,如果你的模塊有依賴關係,只是宣佈他們在你package.json。下面是從我burro模塊

// package.json 
{ 
    // ... 
    "devDependencies": { 
    "mocha": "~1.8.1", 
    "hiccup": "~0.1.4" 
    }, 
    "dependencies": { 
    "bun": "~0.0.5" 
    } 
} 

一個例子對於它的價值,我不實際使用的npm link功能;我單獨構建/測試所有模塊。如果您需要其他示例,您可以在我的github repositories上看到它們中的一小部分。

我的基本工作流程是這樣的:

  1. 補丁模塊模塊A
  2. 凹凸A版本
  3. npm publish模塊模塊B模塊A的
  4. 凹凸版本依賴
  5. npm install模塊B中的模塊A
  6. 補丁模塊B與新版本的模塊A一起工作(如果需要)
  7. 在模塊B凹凸版
  8. npm publish模塊B

npm link是很方便的,但我認爲它使/鼓勵太緊你的模塊之間的耦合。我堅信「做一件事,做得好」的口號,並在編寫我的所有模塊時牢記這一點。使用這個工作流程將有助於保持您的功能封裝良好,社區會喜歡您的版本。


至於github位,npm並不真正關心這一點。作爲一種習慣,在我發佈一個npm publish之前,我會一直使用模塊版本標記該提交。這裏有一個例子

  1. 集版本爲 「0.1.5」 在package.json
  2. git commit -m "bump to version 0.1.5"
  3. git tag v0.1.5
  4. git push origin master --tags
  5. npm publish

現在無論npmjs.org和github.com都同意相同的版本。從任一來源下載你的軟件包的用戶總是會得到同樣的結果。

+0

因此,如果您正在開發一個功能,需要您更改模塊A和模塊B,則基本上每次在A編輯文件時都會執行「修補程序/凹凸/發佈/等等」 , 對 ?你如何設法避免這種情況? – phtrivier 2014-07-21 14:07:16

+0

@phrivier你無法避免它;不應該。這些模塊是分開的,應該相應地進行版本控制。首先模塊化事物的要點是每個庫都可以隨着lib的需求變化而獨立增長。 – naomik 2014-07-23 21:25:07

+0

感謝您的建議。問題是,我主要使用一個模塊來共享代碼,而不是用邏輯來分割或組織。我已經在其他地方被建議分裂/重構/重組,但是我能預見的唯一結果是*更復雜,並且只要他們想要做出最微不足道的改變,就可以爲我的茶友工作。所以我承認我有點癱瘓:/ – phtrivier 2014-07-24 08:16:19