ข้อผิดพลาด Npm เมื่อติดตั้งแพ็กเกจบน windows share


52

ฉันมี Ubuntu 12.10 ที่ทำงานในฐานะแขกของ VMware บนโฮสต์ Windows 8 ของฉัน

ฉันได้แชร์โฟลเดอร์ไว้ใน Windows 8 Host ของฉันแล้วและติดตั้งในแขก Ubuntu เมื่อเริ่มต้นใช้รายการนี้ในfstab:

//myhost/work /work cifs credentials=/home/user/.smbcredentials,noserverino,nounix,uid=user,gid=user,file_mode=0777,dir_mode=0777 0 0 

การแชร์ทำงานได้ดีและสามารถให้บริการโดยเว็บเซิร์ฟเวอร์เช่น nginx

อย่างไรก็ตามดูเหมือนว่าจะมีปัญหาเมื่อฉันติดตั้งแพ็คเกจ node.js โดยใช้ npm ฉันได้รับข้อผิดพลาดจำนวนมากเช่นนี้:

user@ubuntu:/work/test$ sudo npm install grunt
npm http GET https://registry.npmjs.org/grunt
npm http 304 https://registry.npmjs.org/grunt
...
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash'
npm ERR! error rolling back  grunt@0.4.1 { [Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/work/test/node_modules/grunt/node_modules/lodash' }
npm ERR! Error: UNKNOWN, symlink '../which/bin/which'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path ../which/bin/which
npm ERR! code UNKNOWN
npm ERR! errno -1
npm ERR! Error: ENOENT, chmod '/work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! fstream_finish_call chmod
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:305:19
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/minimatch/test/basic.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/glob/test/00-setup.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

สิ่งที่อาจทำให้เกิดปัญหานี้ จากบรรทัดคำสั่งฉันสามารถchmod, rmdirหมู่สิ่งอื่น ๆ ที่ใช้ sudo โดยไม่มีปัญหาใด ๆ

คำตอบ:


118

ทำงานด้วยการ--no-bin-linksแก้ไขมันสำหรับฉัน:

npm install --no-bin-links

--no-bin-linksบอกว่าnpmจะไม่สร้างลิงก์สัญลักษณ์ใด ๆ ไม่มีทาง (สำหรับความรู้ของฉัน) ในการแปล symlink เป็น Windows share


15
ฉันหวังว่าฉันจะสามารถโหวตคุณอีก 200 ครั้ง สิ่งนี้ทำให้สามารถใช้ Vagrant บน windows ได้
Clint

1
npm ติดตั้ง - no-bin-link ยังใช้งานได้
JamieJag

2
คำตอบที่ดี! แต่มีวิธีทำให้งานนี้กับ "devDependencies" ของไฟล์ package.json จาก Grunt หรือไม่ นั่นจะยอดเยี่ยม :)
Jelmer

1
ขอขอบคุณ! คนจรจัดควรวางสิ่งนี้ไว้ในเอกสารประกอบอย่างเป็นทางการสำหรับ Windows คะแนนทั้งหมดของฉันเป็นของคุณ
htxryan

1
ขอบคุณคุณได้บันทึกวันของฉันฉันกำลังดิ้นรนจาก 1 วัน
Manjunath Siddappa

6

วิธีอนุญาตให้สร้าง symlink บน windows หน้านี้ช่วยฉันได้มากซึ่งอธิบายว่าสิ่งนี้เกิดขึ้นแม้ว่าโฟลเดอร์ที่คุณแบ่งปันจะสามารถเขียนได้

ในการแก้ไขคุณต้องเปิดใช้งานคุณลักษณะ symlink ใน VirtualBox

ทำงานที่พรอมต์คำสั่ง:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

จากนั้นตรวจสอบโดย:

VBoxManage getextradata YOURVMNAME enumerate

หากผู้ใช้ของคุณอยู่ในกลุ่มผู้ดูแลระบบให้เริ่ม VirtualBox ด้วย "Run as Administrator"!

ตามค่าเริ่มต้นนโยบายความปลอดภัยของ Windows 7 ไม่อนุญาตให้สร้าง symlink เนื่องจากเป็นภัยคุกคามความปลอดภัยที่อาจเกิดขึ้น เรียกใช้ "secpol.msc" และไปที่ "การกำหนดสิทธิ์สำหรับผู้ใช้นโยบายท้องถิ่น" และเพิ่มผู้ใช้ของคุณไปที่ "สร้างลิงก์สัญลักษณ์" ฉันไม่ได้ลอง แต่อาจเป็นไปได้ว่าหลังจากที่ VirtualBox นั้นสามารถเรียกใช้ในฐานะผู้ใช้ทั่วไปได้


3

เห็นด้วยกับ lorem แต่ก็ไม่เพียงพอ

  1. เรียกใช้ Virtualbox 'เป็นผู้ดูแลระบบ' บน Windows

  2. ให้แน่ใจว่าคุณดำเนินการ: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

แทนที่ YOUR_VM และ YOUR_SHARED_FOLDER ด้วยค่าของคุณ คุณสามารถตรวจสอบค่าผ่านทาง:VBoxManage.exe getextradata boot2docker-vm enumerate

มีข้อผิดพลาด virtualboxติดตามปัญหานี้


1

VirtualBox เวอร์ชันที่ใหม่กว่าควรอนุญาตให้มีการเชื่อมโยงหากคุณเริ่ม VirtualBox เป็นผู้ดูแลระบบ (คลิกขวา: เรียกใช้ในฐานะผู้ดูแลระบบ)

เช่นเดียวกับกล่องคนจรจัด: เพียงแค่เรียกใช้ cmd.exe / PowerShell ในฐานะผู้ดูแลระบบและคุณพร้อมที่จะไป


0

ในฉบับนี้ปัญหา @drmyersii ให้ทางออกที่ดีฉันจะคัดลอกและวางเพื่อไม่เชื่อมโยงคำตอบเท่านั้น

ทางออกที่แท้จริงที่นี่คือการตั้งค่าการกำหนดค่าของคุณเพื่ออนุญาต symlink ในโฮสต์ Windows ใน Vagrantfile ของคุณ นี่คือตัวอย่าง (สมมติว่าคุณกำลังใช้งานใน VirtualBox):

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end

นี้ทำงานที่ดีสำหรับฉันและตอนนี้ฉันสามารถใช้อึกกับscotchbox


0

สำหรับฉันคำตอบเหล่านี้ไม่ทำงาน ฉันไม่แน่ใจว่าทำไม แต่ฉันเชื่อว่าเป็นเพราะส่วนแบ่งของฉันคือ nfs ดังนั้นฉันจึงไม่สามารถอนุญาต symlink ได้แม้ในขณะที่ทำงานเป็นผู้ดูแลระบบและเปลี่ยนการตั้งค่า setextradata ฉันทำงานกับอึกและแพ็คเกจอื่น ๆ ที่ดูเหมือนว่ามีปัญหาในการ เชื่อฟัง --no-bin-links มันยังคงพยายามสร้างลิงก์สัญลักษณ์และล้มเหลวอย่างเห็นได้ชัด ในที่สุดหัวข้อนี้ใน Github ทำให้ฉันเป็น "ทางออก" แฮ็คอย่างที่มันอาจจะเป็น ฉัน "เพียงแค่" ติดตั้งโครงการในโฟลเดอร์ที่ไม่แชร์ของฉันและตั้งค่าเป็น NODEPATH ของฉัน

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

ข้อแม้คือว่ามันจะส่งผลกระทบต่อเซิร์ฟเวอร์ทั้งหมดและเวิร์กโฟลว์ของการปรับปรุง / เปลี่ยนบรรจุภัณฑ์

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