W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
package-lock.json
對(duì)于任何 npm 修改node_modules
樹(shù)或package.json
.?它描述了生成的確切樹(shù),以便后續(xù)安裝能夠生成相同的樹(shù),而不管中間依賴(lài)項(xiàng)更新如何。
此文件旨在提交到源存儲(chǔ)庫(kù)中,并用于多種目的:
node_modules
而無(wú)需提交目錄本身。package.json
?文件的需要,并允許顯著的性能改進(jìn)。package-lock.json
?對(duì)比?npm-shrinkwrap.json
這兩個(gè)文件具有相同的格式,并且在項(xiàng)目的根目錄中執(zhí)行類(lèi)似的功能。
不同的是package-lock.json
不能發(fā)布,如果在根項(xiàng)目以外的任何地方發(fā)現(xiàn)都會(huì)被忽略。
相比之下,npm-shrinkwrap.json允許發(fā)布,并從遇到的點(diǎn)定義依賴(lài)樹(shù)。除非部署 CLI 工具或以其他方式使用發(fā)布過(guò)程來(lái)生成生產(chǎn)包,否則不建議這樣做。
如果package-lock.json
和npm-shrinkwrap.json
都存在于項(xiàng)目的根目錄中,npm-shrinkwrap.json
則將優(yōu)先并被?package-lock.json
忽略。
為了避免node_modules
重復(fù)處理文件夾,從 v7 開(kāi)始,npm 使用存在于?node_modules/.package-lock.json
.?這包含有關(guān)樹(shù)的信息,node_modules
如果滿(mǎn)足以下條件,則用于代替讀取整個(gè)層次結(jié)構(gòu):
它引用的所有包文件夾都存在于node_modules
層次結(jié)構(gòu)中。node_modules
層次結(jié)構(gòu)中不存在未在鎖定文件中列出的包文件夾。文件的修改時(shí)間至少與其引用的所有包文件夾一樣近。也就是說(shuō),隱藏的鎖文件只有在作為包樹(shù)的最新更新的一部分創(chuàng)建時(shí)才相關(guān)。如果另一個(gè) CLI 以任何方式改變樹(shù),這將被檢測(cè)到,隱藏的鎖文件將被忽略。
注意,它是可以手動(dòng)改變內(nèi)容在這樣一種方式,包文件夾的修改的時(shí)間是不受影響的封裝的。例如,如果您將文件添加到node_modules/foo/lib/bar.js
,則修改時(shí)間node_modules/foo
不會(huì)反映此更改。如果您在 中手動(dòng)編輯文件node_modules
,通常最好刪除 中的文件node_modules/.package-lock.json
。
由于較舊的 npm 版本會(huì)忽略隱藏的鎖文件,因此它不包含“普通”鎖文件中存在的向后兼容性可供性。也就是說(shuō),它是lockfileVersion: 3
,而不是?lockfileVersion: 2
。
當(dāng) npm 在包安裝過(guò)程中從 npm v6 或之前檢測(cè)到鎖文件時(shí),它會(huì)自動(dòng)更新以從node_modules
樹(shù)或(在空node_modules
樹(shù)或非常舊的鎖文件格式的情況下?)npm 注冊(cè)表中獲取丟失的信息。
這是一個(gè)包鎖的包的名稱(chēng)。這將匹配package.json
.
這是一個(gè)包鎖的包的版本。這將匹配package.json
.
一個(gè)整數(shù)版本,從1
這個(gè)文檔的版本號(hào)開(kāi)始,在生成 this 時(shí)使用了它的語(yǔ)義?package-lock.json
。
請(qǐng)注意,npm v7 中的文件格式發(fā)生了重大變化,以跟蹤原本需要查看node_modules
npm 注冊(cè)表的信息。npm v7 生成的鎖文件將包含?lockfileVersion: 2
.
未提供版本:來(lái)自 npm v5 之前的 npm 版本的“古老”收縮包裝文件。1
:npm v5 和 v6 使用的鎖文件版本。2
:npm v7 使用的鎖文件版本,向后兼容 v1 鎖文件。3
:npm v7 使用的鎖文件版本,沒(méi)有向后兼容性可供性。這用于隱藏的鎖文件?node_modules/.package-lock.json
,一旦不再支持 npm v6,很可能會(huì)在 npm 的未來(lái)版本中使用。npm 將始終嘗試從鎖定文件中獲取它可以獲取的任何數(shù)據(jù),即使它不是它旨在支持的版本。
這是一個(gè)將包位置映射到包含有關(guān)該包的信息的對(duì)象的對(duì)象。
根項(xiàng)目通常以 鍵列出""
,所有其他包都以它們從根項(xiàng)目文件夾的相對(duì)路徑列出。
包描述符具有以下字段:
package.json
sha512
或sha1
?標(biāo)準(zhǔn)子資源完整性字符串。devDependencies
樹(shù)的一部分,則為?dev
真。如果它嚴(yán)格是optionalDependencies
樹(shù)的一部分,optional
則將被設(shè)置。如果它既是一個(gè)dev
依賴(lài)性和一個(gè)optional
非開(kāi)發(fā)依賴(lài)的相關(guān)性,然后devOptional
將被設(shè)置。(optional
依賴(lài)項(xiàng)的dev
依賴(lài)項(xiàng)將同時(shí)設(shè)置dev
和optional
設(shè)置。)preinstall
,?install
或postinstall
腳本。npm-shrinkwrap.json
文件。package.json
用于支持使用lockfileVersion: 1
.?這是包名到依賴(lài)對(duì)象的映射。因?yàn)閷?duì)象結(jié)構(gòu)是嚴(yán)格分層的,符號(hào)鏈接依賴(lài)在某些情況下很難表示。
如果某個(gè)packages
部分存在,npm v7 會(huì)完全忽略該部分,但會(huì)使其保持最新?tīng)顟B(tài)以支持在 npm v6 和 npm v7 之間切換。
依賴(lài)對(duì)象具有以下字段:
1.2.3
)git+https://example.com/foo/bar#115311855adb0789a0466714ed48a1499ffea97e
)https://example.com/example-1.3.0.tgz
)file:///opt/storage/example-1.3.0.tgz
)file:libs/our-module
)sha512
或sha1
?標(biāo)準(zhǔn)子資源完整性字符串。對(duì)于 git 依賴(lài)項(xiàng),這是提交 sha。dependencies
或比我們更高級(jí)別的依賴(lài)項(xiàng)。Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: