2017-09-06 109 views
1

我們還沒有在應用程序中將node_modules文件夾提交到修訂控制。我們的構建流程和開發者指令包括在初始檢查時手動運行「npm install」以安裝所需的節點模塊。我們的package.json文件詳細說明了特定的依賴版本。使用NPM/Node/package.json修訂控制和依賴關係解析

最近,我們的自動構建破了,因爲一個下游依賴打破了由於最近的第三方提交,我認爲這是不可能的。我們的package.json文件如下:

{ 
      "name": "test-package", 
    "description": "Test Package", 
     "version": "1.0.0", 
     "license": "UNLICENSED", 
     "private": true, 
    "repository": { "type": "svn", "url": "" }, 
    "dependencies": { 
    "extend": "3.0.0", 
    "windows-registry": "0.1.3" 
    } 
} 

具體來說,我們對「Windows的註冊表」版本依賴「0.1.3」,因爲該模塊(「參考」版本「1.2.0孩子依賴的爆發「)。從「Windows的註冊表」的package.json文件的依賴關係如下:

"dependencies": { 
     "debug": "^2.2.0", 
     "ffi": "^2.0.0", 
     "ref": "^1.2.0", 
    "ref-struct": "^1.0.2", 
    "ref-union": "^1.0.0" 
} 

我會假設「Windows的註冊表」總是引用「裁判」包版「1.2.0」,但它是實際上拉動了版本「1.3.4」,然後是最近的「1.3.5」,這打破了我們的構建。我在package.json文件中爲「ref」驗證它不是版本「1.2.0」。 「ref」的package.json文件非常龐大,文件中的各個鍵下面有很多值,比如「[email protected]^1.2.0」。是的package.json文件中有趣的部分如下:

{ 
    /* Lots of other stuff */ 
    "_spec": "[email protected]^1.2.0", 
    "version": "1.3.4" 
} 

爲什麼NPM不加載相同一致的可重複的依賴關係圖?我們應該將node_modules提交給我們的修訂控件嗎?

回答

1

this SO回答:

在最簡單的方面,波浪線之後的最新次要版本(中間數)相匹配。 〜1.2.3將匹配所有1.2.x版本,但會錯過1.3.0。

另一方面,插入符號更放鬆。它會將您更新到最新的主要版本(第一個數字)。^1.2.3將匹配包括1.3.0在內的任何1.x.x版本,但會在2.0.0版本上推遲。

至於你的其他問題:你一定要提交您node_modules文件夾。您應該提交package-lock.json文件,該文件將凍結您的依賴項。該shrinkwrap命令通常用於此,但由於npm V5鎖定文件默認生成

我也建議尋找到yarn,這是在管理複雜的依賴關係樹更好,更快的npm兼容包管理器

最後,由於npm庫或多或少執行semver,它有助於瞭解每個增量是什麼應該打破與非重大更改的術語來表示。就你而言,如果程序包作者遵循語義版本控制,則更改應該向後兼容:

給定版本號MAJOR.MINOR。PATCH,遞增:

  • 當你做出不兼容的API改變主要版本,
  • 當你在一個向後兼容的方式添加功能次要版本,當你做向後兼容的bug修復
  • 補丁版本。
+0

在我的程序員想要讀到這樣一個正則表達式的CARRET而且感覺更具體的我 - 這就是我得到的不是閱讀文檔更好。我想用這種說法來確保您的依賴性是一致的唯一方法是提交您的節點模塊?這真的很臭,因爲它很大,並在bin文件夾中包含編譯的二進制文件等。有沒有其他辦法呢? – jriffel73