มีวิธีบังคับให้ npm สร้าง package-lock.json หรือไม่


132

ฉันลบมันโดยไม่ได้ตั้งใจและได้ทำการเปลี่ยนแปลงมากมายpackage.jsonตั้งแต่นั้นมา npm installหรือnpm updateไม่สร้างpackage-lock.jsonอีกต่อไป ฉันพยายามล้างแคช npm และแคช nvm ของฉัน แต่ดูเหมือนจะไม่มีอะไรทำงาน ฉันลองใช้กับ Node.js หลายเวอร์ชัน (6.10.3 Node.js - 3.10.10 npm คือสิ่งที่ฉันต้องการให้มันทำงาน) และมันไม่ทำงานกับไฟล์ใด ๆ

มีวิธีบังคับให้ npm สร้างpackage-lock.jsonไฟล์หรือไม่


2
ฉันคิดว่า package-lock.json เฉพาะสำหรับ npm 5
Brett Merrifield

3
package-lock.jsonสร้างขึ้นโดยอัตโนมัติตามค่าเริ่มต้นใน npm เริ่มจาก v5 ในเวอร์ชันก่อนหน้าชื่อไฟล์ล็อกคือnpm-shrinkwrap.jsonและสร้างขึ้นด้วยตนเองโดยใช้npm shrinkwrapคำสั่ง
alexmac

@BrettMerrifield ขอบคุณ! นั่นคือปัญหาของฉัน ฉันอัปเดตnode 8.6.0และกับมันnpm 5.3.0และใช้งานได้
Big Money

ตรวจสอบ.gitignoreไฟล์. ฉันบังเอิญมีpackage-lock.jsonอยู่ใน.gitignoreอย่างใดอย่างหนึ่งและเพราะpackage-lock.jsonไม่ได้ปรากฏตัวในgit statusมันทำให้ฉันทิ้ง
Joshua Pinter

คำตอบ:


156

โดยค่าเริ่มต้นที่มีการปรับปรุงเมื่อใดก็ตามที่คุณเรียกpackage-lock.json npm installอย่างไรก็ตามสามารถปิดใช้งานได้ทั่วโลกโดยการตั้งค่าpackage-lock=falseใน~/.npmrc.

เมื่อการpackage-lock=falseตั้งค่าส่วนกลางทำงานอยู่คุณยังคงบังคับpackage-lock.jsonให้อัปเดตไฟล์ของโครงการได้โดยเรียกใช้:

npm install --package-lock

คำสั่งนี้เป็นวิธีเดียวที่แน่นอนในการบังคับให้package-lock.jsonอัพเดต


@RonNewcomb คุณสามารถแบ่งปันข้อมูลเพิ่มเติมได้หรือไม่? "มันใช้ไม่ได้" หมายความว่าอย่างไร คุณกำลังใช้ npm เวอร์ชันใด
Mathias Bynens

npm เวอร์ชัน 3.10.10 Node 6.10.3 คำสั่งที่คุณระบุดูเหมือนจะเป็น no-op? ไม่มีอะไรเกิดขึ้น. ไม่มีข้อผิดพลาดไม่เปลี่ยนไฟล์ไม่มีอะไร
Ron Newcomb

2
หากคุณใช้ npm v3 สำหรับโปรเจ็กต์ของคุณคุณจะไม่มีไฟล์package-lock.json. package-lock.jsonได้รับการสนับสนุนโดย npm v5 + เท่านั้น
Mathias Bynens

8
npm v 6.4.1 และสิ่งนี้ไม่ได้สร้าง package-lock.json
mjuopperi

1
มันใช้ได้กับฉันใน 6.4.1 การตั้งค่าเป็นเท็จยังป้องกันไม่ให้สร้างขึ้น
Kevin B

94

ใน npm 6.x คุณสามารถใช้ได้

npm i --package-lock-only

อ้างอิงจากhttps://docs.npmjs.com/cli/install.html

อาร์กิวเมนต์ --package-lock-only จะอัปเดต package-lock.json เท่านั้นแทนที่จะตรวจสอบ node_modules และดาวน์โหลดการอ้างอิง


12
นี่คือคำตอบที่ถูกต้องในตอนนี้คนอื่นอายุมากและไม่เคยทำงาน
Vaibhav Singh

มีเงื่อนงำวิธีการสร้าง package-lock.json โดยไม่มี devDependencies หรือไม่? ฉันต้องการสิ่งนี้สำหรับการติดตั้งการผลิตที่สะอาด npm i --package-lock-only --only=productionดูเหมือนจะไม่ทำงาน
โรเบิร์ต

ฉันไม่คิดว่าเป็นไปได้ที่จะสร้างpackage-lock.jsonเฉพาะสำหรับการอ้างอิงการผลิตเท่านั้น แต่ถ้าคุณรันnpm i --only=productionควรติดตั้งเฉพาะการอ้างอิงการผลิตเท่านั้น ดังนั้นขั้นตอนการสร้างของคุณอาจมีลักษณะดังนี้: ติดตั้งการอ้างอิงทั้งหมดสร้างแอปลบnode_modulesและติดตั้งเฉพาะการอ้างอิงการผลิต
Janusz Przybylski

14

นี่คือคำตอบในความคิดเห็น; package-lock.jsonเป็นฟีเจอร์ในnpmเวอร์ชัน 5 ขึ้นไป npm shrinkwrapคือวิธีสร้างไฟล์ล็อกในทุกเวอร์ชันของnpmไฟล์.


1
อย่างไรก็ตามโปรดทราบว่านั่นpackage-lock.jsonไม่ใช่สิ่งเดียวกับไฟล์ shrinkwrap
strugee

7
ใน npm 5+ อันที่จริงแล้วพวกเขาเหมือนกันทุกประการในทุกรายละเอียดยกเว้นสิ่งเดียว: npm-shrinkwrap.jsonจะเผยแพร่ไปยังรีจิสทรีและpackage-lock.jsonจะไม่
LJHarb

6
อ๋อ นั่นเป็นข้อแตกต่างที่สำคัญมากซึ่งเป็นเหตุผลว่าทำไมฉันถึงแสดงความคิดเห็น
strugee

1
npm shrinkwrapสร้างnpm-shrinkwrap.jsonแต่คุณจะสร้างได้package-lock.jsonอย่างไร?
วิก

5
โดยอัตโนมัติใน npm 5+ หรือคุณสามารถบังคับเป็น 5+ ด้วย--package-lock
LJHarb

1

ตามที่หลาย ๆ คำตอบได้อธิบายไว้คุณควรเรียกใช้:

npm i

แต่ถ้ายังแก้ไม่ได้ ...

ตรวจสอบเวอร์ชันของnpmไฟล์ปฏิบัติการของคุณ (สำหรับฉันมันคือ 3.xx ซึ่งไม่ใช้package-lock.json(เลย))

npm -v

ควรมีอย่างน้อย 5.xx (ซึ่งแนะนำไฟล์ package-lock.json)

ในการอัปเดต npm บน Lunix ให้ทำตามคำแนะนำเหล่านี้

สำหรับรายละเอียดเพิ่มเติมไฟล์แพ็กเกจโปรดอ่านเรื่องขนาดกลางนี้


0

หากคุณNPMรุ่นต่ำกว่า5 รุ่นแล้วติดตั้งรุ่นที่สูงขึ้นสำหรับการได้รับการผลิตอัตโนมัติของแพคเกจ lock.json

ตัวอย่าง:อัปเกรดnpmปัจจุบันของคุณเป็นเวอร์ชัน 6.14.0

npm i -g npm@6.14.0

คุณสามารถดูรายการเวอร์ชันnpmล่าสุดได้โดย

npm view npm versions

-3

แพคเกจ lock.json npm iเป็นอีกครั้งที่สร้างขึ้นเมื่อใดก็ตามที่คุณเรียก


13
นี่คือความจริงเพียง แต่สำหรับบางรุ่นและnode npmฉันคิดว่ามันเป็นnpm> = 5.0และnode> = 7.0แต่ฉันไม่แน่ใจ 100% ในเรื่องนั้น มันใช้ไม่ได้กับnode 6.11.3ฉัน
Thor84no

2
นอกจากนี้ยังไม่เป็นจริงหากตั้งค่า package-lock เป็น false ในการกำหนดค่า npm ใช้ 'npm config list' เพื่อตรวจสอบ
Damo

package-lock.json ถูกสร้างขึ้นโดยอัตโนมัติสำหรับการดำเนินการใด ๆ โดยที่ npm ปรับเปลี่ยนโครงสร้าง node_modules หรือ package.json Acorrding เพื่อ docs.npmjs.com/files/package-lock.json แต่ไม่ได้ระบุเวอร์ชัน npm
NanoNova
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.