Lỗi Npm khi cài đặt gói trên windows share


52

Tôi có Ubuntu 12.10 đang chạy với tư cách là khách VMware trên máy chủ Windows 8 của mình.

Tôi đã chia sẻ một thư mục trên Máy chủ Windows 8 của mình và nó được gắn vào máy khách Ubuntu khi khởi động bằng cách sử dụng mục này trong fstab:

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

Chia sẻ hoạt động tốt và có thể được phục vụ bởi một máy chủ web như nginx.

Tuy nhiên, dường như có vấn đề khi tôi cài đặt các gói node.js bằng npm, tôi gặp một loạt lỗi như thế này:

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$ 

Điều gì có thể gây ra vấn đề này? Từ dòng lệnh, tôi có thể chmod, rmdirtrong số những thứ khác sử dụng sudo mà không gặp vấn đề gì.

Câu trả lời:


118

Chạy với --no-bin-linkscố định nó cho tôi:

npm install --no-bin-links

--no-bin-linksnói npmđể không tạo ra bất kỳ liên kết tượng trưng. Không có cách nào (theo hiểu biết của tôi) về việc dịch các liên kết tượng trưng sang chia sẻ Windows.


15
Tôi ước tôi có thể nâng bạn lên 200 lần nữa. Điều này làm cho nó có thể sử dụng Vagrant trên windows.
Clint

1
cài đặt npm --no-bin-link cũng hoạt động.
JamieJag

2
Câu trả lời chính xác! Nhưng có cách nào để làm cho công việc này hoạt động với "devDependencies" của tệp pack.json từ Grunt không? Điều đó thật tuyệt vời :)
Jelmer

1
Cảm ơn bạn! Vagrant nên đặt điều này trong tài liệu chính thức của họ cho Windows. Tất cả các điểm của tôi thuộc về bạn.
htxryan

1
Cảm ơn bạn, bạn đã cứu ngày của tôi, tôi đã vật lộn từ 1 ngày
Manjunath Siddappa

6

Cách cho phép tạo liên kết tượng trưng trên windows trang này đã giúp tôi rất nhiều, điều này giải thích rằng điều này xảy ra ngay cả khi thư mục chia sẻ của bạn có thể ghi được.

Để khắc phục, bạn cần bật tính năng liên kết tượng trưng trong VirtualBox.

Chạy tại dấu nhắc cmd:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Sau đó xác minh bằng:

VBoxManage getextradata YOURVMNAME enumerate

Nếu người dùng của bạn thuộc nhóm Quản trị viên thì hãy khởi động VirtualBox bằng "Chạy với tư cách Quản trị viên"!

Theo mặc định, chính sách bảo mật của Windows 7 không cho phép tạo liên kết tượng trưng vì đây là mối đe dọa bảo mật tiềm ẩn. Chạy "secpol.msc" và điều hướng đến "Chính sách địa phương - Nhiệm vụ quyền người dùng" và thêm người dùng của bạn vào "Tạo liên kết tượng trưng". Tôi đã không thử điều đó nhưng có thể là sau khi hộp ảo đó có thể chạy như một người dùng thông thường.


3

Đồng ý với lorem, nhưng nó không đủ.

  1. chạy Virtualbox 'với tư cách là quản trị viên' trên Windows.

  2. đảm bảo bạn đã thực hiện: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Thay thế YOU_VM và YOU_SHARED_FOLDER bằng các giá trị của bạn. Bạn có thể kiểm tra giá trị thông qua:VBoxManage.exe getextradata boot2docker-vm enumerate

một lỗi hộp ảo theo dõi vấn đề này.


1

Các phiên bản mới hơn của VirtualBox sẽ cho phép liên kết tượng trưng nếu bạn khởi động VirtualBox với tư cách Quản trị viên (nhấp chuột phải: Chạy với tư cách quản trị viên).

Áp dụng tương tự cho các hộp mơ hồ: chỉ cần chạy cmd.exe / PowerShell của bạn với tư cách quản trị viên và bạn đã sẵn sàng để sử dụng.


0

trong vấn đề npm này @drmyersii đưa ra một giải pháp tuyệt vời, tôi sẽ chỉ sao chép và dán để không liên kết câu trả lời mà thôi.

Giải pháp thực sự ở đây sẽ là thiết lập cấu hình của bạn để cho phép các liên kết tượng trưng trên máy chủ Windows trong Vagrantfile của bạn. Đây là một ví dụ (giả sử rằng bạn đang chạy nó trong VirtualBox):

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

điều này làm việc rất tốt cho tôi và bây giờ tôi có thể sử dụng gulp với scotchbox .


0

Đối với tôi không có câu trả lời nào trong số này. Tôi không chắc tại sao nhưng tôi tin rằng vì chia sẻ của tôi là nfs. Vì vậy, tôi không thể có được nó để cho phép liên kết tượng trưng ngay cả khi chạy với tư cách Quản trị viên và thay đổi cài đặt setextradata. Tôi đã làm việc với gulp và một số gói khác dường như có vấn đề tuân theo --no-bin-links. Đó là VẪN cố gắng tạo ra một số liên kết tượng trưng và rõ ràng là thất bại. Cuối cùng, chủ đề này trên Github đã đưa tôi vào một "giải pháp", hacky như nó có thể. Tôi "chỉ đơn giản" đã cài đặt dự án trong thư mục không chia sẻ của mình và đặt dự án đó là NODEPATH của tôi.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

Hãy cẩn thận là nó sẽ ảnh hưởng đến toàn bộ máy chủ và quy trình cập nhật / thay đổi bao bì.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.