2017-07-12 37 views
18

將我的NPM更新到最新版本(從3.X到5.2.0)並在現有項目上運行npm install後,我得到一個自動創建的package-lock.json文件。我是否需要package-lock.json和package.json?

我可以告訴package-lock.json給我一個確切的依賴樹,而不是package.json

從這個信息來看,似乎package.json是多餘的,不再需要。

它們都是NPM工作所必需的嗎?
是否安全或僅可使用package-lock.json文件?

關於package-lock.json(doc1,doc2)的文檔沒有提及任何有關這方面的內容。

編輯

經過一些思考,我得出的結論是,如果有人想用較舊版本的NPM(5.x的前)也仍然安裝所有的使用項目的依賴關係,但是具有較不準確的版本(版本補丁)

+1

[鏈接](https://stackoverflow.com/questions/44297803/package-lock-json-role) –

回答

11

從NPM文檔頁:

package-lock.json任何OPERAT自動生成其中npm修改node_modules樹或package.json。它描述了生成的確切樹,以便後續安裝能夠生成相同的樹,而不管中間依賴性更新如何。

With package.json您無法控制嵌套依賴項的版本。即使您鎖定了直接依賴關係的版本,也不能100%保證每次完全依賴關係樹都是相同的。

隨着package-lock.json,鎖定文件鎖定完整的依賴關係樹的版本。這使您可以保證爲其他開發人員或發行版提供依賴關係樹,同時仍允許使用標準package.json測試新的依賴項版本(直接或間接)。

因此,它不是多餘的,而是提供了在嚴格環境下安裝依賴關係樹的功能。

+1

雖然你說的是真的,但我問是否有可能只使用'package-lock'。 json',因爲它只是更準確地描述了項目的依賴關係。 –

+1

是的,只有package-lock.josn文件就足夠了,但在做大量貢獻者並且你不瞭解其環境的大型項目時,最好包含這兩個文件。 –

+0

如果您可以編輯和修改答案中的最後一段,我會獎賞您的賞金。這不是100%清楚你在說什麼。 –

0

如果你的問題是如果鎖定文件應該提交給你的源代碼管理 - 它應該。在某些情況下會被忽略。

我發現它膨脹拉請求和提交歷史,所以如果你看到它發生了變化,請爲它做一個單獨的提交。

+1

不,我並不是在詢問提交來源控制。就在NPM需要他們同時**才能工作的時候。 'package-lock.json'似乎是'package.json'的一個更詳細的版本,所以只使用鎖定文件是安全的或可能的。 –

+0

我明白了,我在我的項目中留下了package.json,主要是爲了有一個npm腳本的地方。 –