คุณอาจมีสิ่งที่ชอบ:
"typescript":"~2.1.6"
ในpackage.json
npm ของคุณที่อัปเดตเป็นรุ่นรองล่าสุดในกรณีของคุณ2.4.1
แก้ไข: คำถามจาก OP
แต่นั่นไม่ได้อธิบายว่าทำไม "การติดตั้ง npm" จะเปลี่ยนไฟล์ล็อค ไฟล์ล็อคไม่ได้หมายถึงการสร้างบิลด์ที่ทำซ้ำได้หรือไม่ ถ้าเป็นเช่นนั้นไม่ว่าค่า semver จะยังคงใช้เวอร์ชัน 2.1.6 เดียวกัน
ตอบ:
สิ่งนี้มีไว้เพื่อล็อคทรีการพึ่งพาทั้งหมดของคุณ สมมติว่าต้องtypescript v2.4.1
widget ~v1.0.0
เมื่อคุณติดตั้ง NPM widget v1.0.0
คว้ามัน ต่อมาเมื่อเพื่อนนักพัฒนาของคุณ (หรือ CI สร้าง) ไม่ NPM ติดตั้งและได้รับtypescript v2.4.1
แต่ได้รับการปรับปรุงwidget
widget v1.0.1
ตอนนี้โมดูลโหนดของคุณไม่ซิงค์กัน นี่คือสิ่งที่package-lock.json
ป้องกัน
หรือมากกว่าโดยทั่วไป:
เป็นตัวอย่างให้พิจารณา
แพ็คเกจ A:
{"name": "A", "version": "0.1.0", "dependencies": {"B": "<0.1.0"}}
แพ็คเกจ B:
{"name": "B", "version": "0.0.1", "dependencies": {"C": "<0.1.0"}}
และแพคเกจ C:
{"name": "C", "version": "0.0.1"}
หากสิ่งเหล่านี้เป็น A, B และ C เท่านั้นที่มีอยู่ในรีจิสทรีดังนั้นการติดตั้ง NPM ปกติ A จะติดตั้ง
A@0.1.0 - B@0.0.1 - C@0.0.1
อย่างไรก็ตามหากเผยแพร่ B@0.2.2 จะมีการติดตั้ง NPM ใหม่ A:
A@0.1.0 - B@0.0.2 - C@0.0.1 โดยสมมติว่าเวอร์ชันใหม่ไม่ได้แก้ไขการขึ้นต่อกันของ B แน่นอนว่าเวอร์ชันใหม่ของ B อาจรวมเวอร์ชัน C ใหม่และการอ้างอิงใหม่จำนวนเท่าใดก็ได้ หากการเปลี่ยนแปลงดังกล่าวไม่เป็นที่พึงปรารถนาผู้เขียน A สามารถระบุการพึ่งพาใน B@0.0.1 อย่างไรก็ตามถ้าผู้เขียนของ A และผู้เขียน B ไม่ใช่คนเดียวกันไม่มีทางที่ผู้เขียนของ A จะบอกว่าเขาหรือเธอไม่ต้องการดึงในเวอร์ชัน C ที่เผยแพร่ใหม่เมื่อ B ไม่ได้เปลี่ยนแปลงเลย
OP คำถามที่ 2: ให้ฉันดูว่าฉันเข้าใจถูกต้องหรือไม่ สิ่งที่คุณพูดคือไฟล์ล็อคระบุรุ่นของการอ้างอิงรอง แต่ยังต้องอาศัยการจับคู่แบบคลุมเครือของ package.json เพื่อกำหนดการพึ่งพาระดับบนสุด ถูกต้องหรือไม่
คำตอบ: package.json
เลขที่แพคเกจล็อคล็อคต้นไม้แพคเกจรวมทั้งแพคเกจรากที่อธิบายไว้ใน หากtypescript
ถูกล็อค2.4.1
ในของคุณpackage-lock.json
มันควรจะเป็นเช่นนั้นจนกว่ามันจะเปลี่ยนไป และช่วยให้การพูดในวันพรุ่งนี้รุ่นรุ่นtypescript
2.4.2
ถ้าผมชำระเงินสาขาของคุณและรันnpm install
, NPM 2.4.1
จะเคารพแฟ้มล็อคและติดตั้ง
เพิ่มเติมเกี่ยวกับpackage-lock.json
:
package-lock.json ถูกสร้างขึ้นโดยอัตโนมัติสำหรับการดำเนินการใด ๆ ที่ npm ปรับเปลี่ยนแผนผัง node_modules หรือ package.json มันอธิบายต้นไม้ที่แน่นอนที่สร้างขึ้นเช่นที่ติดตั้งในภายหลังจะสามารถสร้างต้นไม้ที่เหมือนกันโดยไม่คำนึงถึงการปรับปรุงการพึ่งพากลาง
ไฟล์นี้มีวัตถุประสงค์เพื่อส่งไปยังที่เก็บข้อมูลต้นทางและให้บริการตามวัตถุประสงค์ต่างๆ:
อธิบายการเป็นตัวแทนของแผนภูมิการพึ่งพาเดียวที่เพื่อนร่วมทีมการปรับใช้และการรวมอย่างต่อเนื่องรับประกันว่าจะติดตั้งการพึ่งพาเดียวกัน
จัดเตรียมสิ่งอำนวยความสะดวกสำหรับผู้ใช้เพื่อ "time-travel" ไปยังสถานะก่อนหน้าของ node_modules โดยไม่ต้องคอมมิตไดเร็กทอรีเอง
เพื่ออำนวยความสะดวกในการมองเห็นการเปลี่ยนแปลงทรีผ่านการควบคุมแหล่งที่มาที่แตกต่าง
และปรับกระบวนการติดตั้งให้เหมาะสมโดยการอนุญาตให้ npm ข้ามการแก้ปัญหาเมทาดาทาซ้ำสำหรับแพ็คเกจที่ติดตั้งไว้ก่อนหน้านี้
https://docs.npmjs.com/files/package-lock.json