NPM ไม่สามารถติดตั้งการอ้างอิงได้ - พยายามปลดล็อกสิ่งที่ไม่ได้ล็อค


192

ฉันพยายามเรียกใช้การติดตั้ง npm ในไฟล์ package.json ของฉัน แต่ฉันมีปัญหามาก มันพูดว่า "ข้อผิดพลาด: พยายามปลดล็อก XXX ซึ่งไม่ได้ล็อค" ในการอ้างอิงของฉันทั้งหมด นี่คือหนึ่งในนั้น:

Error: Attempt to unlock tbd@~0.6.4, which hasn't been locked
        at unlock (/usr/local/lib/node_modules/npm/lib/cache.js:1304:11)
        at cb (/usr/local/lib/node_modules/npm/lib/cache.js:646:5)
        at /usr/local/lib/node_modules/npm/lib/cache.js:655:20
        at /usr/local/lib/node_modules/npm/lib/cache.js:1290:7
        at /usr/local/lib/node_modules/npm/node_modules/lockfile/lockfile.js:167:38
        at OpenReq.Req.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:144:5)
        at OpenReq.done (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:64:22)
        at Object.oncomplete (fs.js:107:15)

หากฉันพยายามเรียกใช้เป็น sudo ดูเหมือนว่าจะได้รับเพิ่มเติมและเริ่มการติดตั้งแพคเกจบางอย่าง แต่ข้อผิดพลาดใหม่ปรากฏขึ้นแทน:

> chokidar@0.8.1 postinstall /Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/chokidar
> node setup-deps.js

shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied

node.js:811
    var cwd = process.cwd();
                      ^
Error: EACCES, permission denied
    at Function.startup.resolveArgv0 (node.js:811:23)
    at startup (node.js:58:13)
    at node.js:902:3
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q'
npm ERR! error rolling back  karma@0.10.9 { [Error: ENOTEMPTY, rmdir '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/q' }
npm ERR! Error: ENOENT, chown '/Users/tkirchner/Documents/Projects/mm-datatable/node_modules/karma/node_modules/socket.io/lib/socket.io.js'

ฉันเพิ่งอัพเดตการติดตั้งโหนดและ npm ของฉัน ดังนั้นอาจมีบางสิ่งที่เกี่ยวข้องกับมัน นอกจากนี้การพัฒนาส่วนใหญ่ของฉันอยู่ที่สำนักงานและวันนี้ฉันทำงานผ่าน VPN ดังนั้นอาจมีบางสิ่งที่เกี่ยวข้องกับมันเช่นกัน

ความคิดใด ๆ


นี่คือไฟล์ package.json ถ้ามันช่วย ... (ถอนหายใจ), nvm ฉันไม่สามารถวางมันได้เลย .. ตัวละครมากเกินไป
TJ Kirchner

คุณใช้ระบบปฏิบัติการอะไร
wayne

คำตอบ:


421

ตาม photusenigma ที่: https://github.com/npm/npm/issues/4815

เรียกใช้คำสั่งเหล่านี้ในหน้าต่างเทอร์มินัล (หมายเหตุ - อย่าแทนที่ส่วน $ USER ... นั่นคือคำสั่ง linux เพื่อให้ผู้ใช้ของคุณ!):

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/local/lib/node_modules

... และ ... หากคุณใช้ mac (เหมือนฉัน) และยังเห็นข้อผิดพลาดหลังจากเรียกใช้คำสั่งเหล่านี้ให้เรียกใช้ไฟล์ล่าสุดและคุณควรจะดี (แนะนำให้คุณลองทดสอบก่อนที่จะทำสิ่งนี้ฉันไม่ชอบการเปลี่ยนการอนุญาตในไดเรกทอรีทั้งหมด / usr / local เว้นแต่ว่ามันจำเป็นจริงๆ!)

sudo chown -R $USER /usr/local

7
ทำงานให้ฉันขอบคุณ! โฟลเดอร์ node_modules ของฉันอยู่ในจุดที่ต่างออกไปบางทีนี่อาจช่วยคนอื่นได้sudo chown -R `whoami` /usr/lib/node_modules/
Justen

4
การเรียกซ้ำchownไม่เปลี่ยนสิทธิ์ใน~/.npm/_locksตัวฉัน ฉันทำงานด้วยการทำงานของฉันsudo chown -R myname ~/.npm/_locks
Sitati

7
โปรดระวังว่าโซลูชันนี้ไม่เหมาะสำหรับแพลตฟอร์มผู้ใช้หลายคน คำสั่งแรกก็โอเคคนที่สองสร้างเจ้าของระบบไฟล์มาตรฐาน / usr / local / lib / node_modules ใช้โดย npm ด้วยตัวเลือก - global เท่านั้นนั่นหมายถึงการใช้ sudo ด้วย น่าเสียดายที่สคริปต์การติดตั้งบางตัวที่ใช้ npm ผสมผสานทั้งคำสั่งโกลบอลและไม่ใช่โกลบอลคำสั่ง ... สร้างระเบียบนี้
Fafaman

5
ตกลงทั้งหมดที่คุณต้องการคือคำสั่งแรก หลีกเลี่ยงคนอื่นเพราะผู้ใช้ของคุณไม่ควรเป็นเจ้าของ
pyrospade

2
มีวิธีการย้อนกลับ "ผลกระทบ" ของบรรทัดที่สองsudo chown -R $USER /usr/local/lib/node_modulesหรือไม่? ฉันวิ่งไปก่อนอ่านว่ามันไม่ใช่ความคิดที่ดีเลย ..
shaneparsons

153

ฉันทำงานกับเพื่อนร่วมงานเมื่อบ่ายนี้และหาว่าปัญหาคืออะไร โฟลเดอร์ ".npm" ของฉันในไดเรกทอรีบ้านของฉันเป็นของผู้ใช้รูทแทนที่จะเป็นของตัวเอง ฉันไม่แน่ใจว่าเกิดอะไรขึ้นกับสิ่งนั้น บางทีฉันอาจติดตั้งโหนดหรือ npm เป็นผู้ดูแลระบบรูทเมื่อถึงจุดหนึ่ง ไม่ว่าในกรณีใดฉันเพิ่งวิ่งsudo chown -R [username] .npmและในที่สุดฉันก็สามารถเรียกใช้npm installคำสั่งจากโครงการของฉันอีกครั้ง!


11
นอกจากนี้ยังช่วยให้คุณดำเนินการคำสั่งเดียวกันบน~/tmp/เช่นกันหรืออะไรก็ตามที่ตั้งโหนดใช้เป็นสถานที่ชั่วคราว
เจสัน

1
ขอบคุณสำหรับคำตอบ! ช่วยให้ฉันปวดหัวเนื่องจากข้อความแสดงข้อผิดพลาดไม่ดี แต่ฉันจะบอกว่า npm จะต้องทำสิ่งนี้โดยค่าเริ่มต้นเพราะฉันค่อนข้างแน่ใจว่าฉันไม่ได้ติดตั้งภายใต้รูทเอง และเพื่อความสมบูรณ์คุณต้อง chown -R <ชื่อผู้ใช้> .npm
crowmagnumb

ดีใจที่ฉันช่วยได้ :) และจับได้ดี! ฉันจะแก้ไขคำตอบของฉันเพื่อบอกว่า
TJ Kirchner

ช่วยชีวิต! ขอบคุณ
Matthew Cullum

21

ในกรณีของฉันปัญหากำลังเรียกใช้ npm กับผู้ใช้ที่ไม่มีไดเร็กทอรี HOME ดังนั้นตัวอย่างเช่นคำสั่งต่อไปนี้จะล้มเหลว:

sudo -u someUser npm install

วิธีแก้ไขคือการจัดทำไดเรกทอรี HOME ซึ่งsomeUserมีสิทธิ์การเขียน:

sudo -u someUser HOME=/some/directory npm install

โหวตขึ้นเพราะสิ่งนี้ได้ผลจริงสำหรับฉันดังนั้นความรุ่งโรจน์และขอบคุณ ฉันกำลังปรับใช้กับการผลิตและผู้ใช้ไม่มีแม้แต่ไดเรกทอรี. npm (ที่ฉันสามารถหาได้)
Stuart Stuart

ใช้งานได้กับ ChromeOS กับผู้ใช้ "chronos"
Kyle Coberly

ฉันสามารถแก้ไขสิ่งนี้ได้โดยการระบุsudo -u someUser -iซึ่งจะเริ่มเชลล์การเข้าสู่ระบบใหม่ ผมมองในนี้บางมากขึ้นและรหัสแคใน NPM ใช้ตัวแปร npm.cache $HOME/.npm/ซึ่งผมคาดเดาค่าเริ่มต้น sudo ยังสามารถมีพฤติกรรมที่แตกต่างกับสิ่งที่ตัวแปร HOME ได้รับการตั้งค่าให้ขึ้นอยู่กับการกำหนดค่าและการมีหรือไม่มีตัวเลือกบรรทัดคำสั่ง
jgibson

11

มีปัญหาเดียวกันและแก้ไขโดยการเปลี่ยนคำตอบตามคำตอบที่ยอมรับ:

sudo chown -R $USER ~/.npm

อย่างไรก็ตามคำสั่งที่สองควรหลีกเลี่ยงในขณะที่มันลดระดับสิทธิ์ของทรัพยากรระบบ ( sudo chown -R $USER /usr/local/lib/node_modules) ไม่ใช่ความคิดที่ดี

สำหรับบันทึก: "usr" ในการ/usr/localยืนสำหรับทรัพยากรระบบยูนิกซ์


1
นี่อาจเป็นความเห็นต่อคำตอบที่ยอมรับแทนที่จะโพสต์เป็นคำตอบใหม่
Kmeixner

ผู้เขียนคำตอบนั้นรู้เรื่องนี้ แต่ยังไม่ได้อัปเดตคำตอบของเขาดังนั้นฉันจึงบอกว่าแยกคำตอบออกจากกันเป็นอย่างมาก
Gui Prá

4

สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันต้องวิ่งตามรากอย่างแท้จริงโดยทำสิ่งต่อไปนี้:

sudo su -
sudo npm install forever -g

จากนั้นแพ็คเกจที่ติดตั้งบน Linux Ubuntu 14.04


คุณไม่ควรเรียกใช้ npm เหมือนรูท!
แอนทอน 'hashar' Musso


1

ทางออกของฉัน:

sudo chown -R $USER /usr/local/lib/node_modules/NAMEOFMODULE

ในกรณีของฉันคือ:

sudo chown -R $USER /usr/local/lib/node_modules/appium/

แต่ฉันได้รับปัญหาเดียวกันในที่สุดหลังจากนั้น

npm cache clean

มันใช้งานได้!


0

ฉันมีปัญหาเดียวกันและพยายามแก้ไขการอนุญาต / การเป็นเจ้าของไฟล์และไดเรกทอรีที่เกี่ยวข้องกับ NPM เป็นเวลาหลายชั่วโมงแต่ก็ไม่มีโชค

ทันใดนั้นฉันก็พบว่าฉันมี~/.npmrcไฟล์ที่มีcacheรายการที่ชี้ไปยังไดเรกทอรีที่ไม่มีอยู่ ลบcacheคุณสมบัตินั้นเพื่อใช้ตำแหน่งแคชดีฟอลต์และตอนนี้ก็แก้ไขได้


0

คำปฏิเสธ

ฉันเป็นผู้ใช้Windows อย่างไรก็ตามทีมของฉันและฉันเจอปัญหาหลายอย่างเกี่ยวกับข้อผิดพลาดในการติดตั้ง npm

ปัญหาที่เกิดขึ้น

ต่อไปนี้เป็นรายการบทเรียนที่เรียนรู้และวิธีการแก้ไขที่เป็นไปได้ที่ช่วยเรา:

  1. node_modules ไดเร็กทอรีการติดตั้งโลคัลnpmจะได้รับการปกป้องจากการแก้ไขโดยข้อบกพร่องของ OS เช่นการไม่สามารถประมวลผลพา ธ ที่ยาวกว่า255อักขระ
  2. หากโฟลเดอร์ถูกลบโดยเครื่องมือบรรทัดคำสั่งมันอาจยังคงปรากฏราวกับว่ามีโฟลเดอร์อยู่ใน explorer ที่เมื่อพยายามเข้าถึงมันจะมีข้อผิดพลาดเกี่ยวกับการอนุญาตจำนวนมาก
  3. ขึ้นอยู่กับตัวจัดการนโยบายป้องกันไวรัสและ / หรือนโยบายท้องถิ่นของคุณคุณสามารถสร้างโฟลเดอร์node_modulesและลดการเข้าถึงหรือการอนุญาตในภายหลังเพื่อลดจำนวนข้อผิดพลาดในการติดตั้ง
  4. เปิดใช้งานบันทึก npm เพื่อรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับปัญหาที่อาจเกิดขึ้นกับ:

    npm install --loglevel verbose

รุนแรง

ติดตั้งrimrafทั่วโลก

 npm install rimraf -g

รัน rimraf บนnode_modules :

rimraf yourDir/node_modules

จากนั้นลองเรียกใช้:

npm install

คำเตือน!

หรือขาดของ rimrafโปรดใช้ความระมัดระวังอย่างมากเกี่ยวกับสิ่งต่อไปนี้คำสั่ง ไม่มีการเตือนไม่มีการเตือนไม่มีอะไรเลย มันเพียงลบไดเรกทอรีจากขั้นตอนของโลกที่สะอาดราวกับว่ามันไม่เคยมี ลองด้วยความเสี่ยงของคุณเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.