Windows共有にパッケージをインストールする際のNPMエラー


52

Windows 8ホストでVMwareゲストとして実行しているUbuntu 12.10があります。

Windows 8ホストでフォルダーを共有しました。起動時に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などのWebサーバーで提供できます。

ただし、npmを使用してnode.jsパッケージをインストールすると問題があるようです。次のようなエラーが大量に発生します。

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$ 

この問題の原因は何ですか?コマンドラインから、特に問題なくsudoを使用してchmodrmdirできます。

回答:


118

--no-bin-links修正して実行しています:

npm install --no-bin-links

--no-bin-linksnpmシンボリックリンクを作成しないように指示します。シンボリックリンクをWindows共有に変換する方法はありません(私の知る限り)。


15
200回以上投票できればと思います。これにより、WindowsでVagrantを使用できるようになります。
クリント

1
npm install --no-bin-linkも機能します。
JamieJag

2
素晴らしい答えです!しかし、Gruntのpackage.jsonファイルの「devDependencies」でこの作業を行う方法はありますか?それは素晴らしいだろう:)
ジェルマー

1
ありがとうございました!Vagrantは、これをWindowsの公式ドキュメントに含める必要があります。私のポイントはすべてあなたのものです。
htxryan 14

1
あなたが私の一日を保存した、ありがとう、私は1日から苦しんでいた
Manjunath Siddappa

6

このページをウィンドウ上でシンボリックリンクの作成を許可する方法は、共有フォルダが書き込み可能であってもこれが起こることを説明してくれました。

これを修正するには、VirtualBoxでシンボリックリンク機能を有効にする必要があります。

cmdプロンプトで実行します。

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

次に確認してください:

VBoxManage getextradata YOURVMNAME enumerate

ユーザーが管理者グループに属している場合、「管理者として実行」でVirtualBoxを起動してください!

既定では、Windows 7セキュリティポリシーは潜在的なセキュリティの脅威であるため、シンボリックリンクの作成を許可しません。「secpol.msc」を実行し、「ローカルポリシー-ユーザー権利の割り当て」に移動して、ユーザーを「シンボリックリンクの作成」に追加します。私はそれを試みませんでしたが、その後、virtualboxを通常のユーザーとして実行できるようになる可能性があります。


3

loremには同意しますが、それだけでは十分ではありません。

  1. WindowsでVirtualboxを「管理者として」実行します。

  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

、このNPMの問題優れたソリューションを提供@drmyersii、私はコピーして、唯一の答えをリンクしていないためにペーストします。

ここでの実際の解決策は、VagrantfileでWindowsホストのシンボリックリンクを許可するように構成を設定することです。次に例を示します(VirtualBoxで実行していると仮定):

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

これは私にとってはうまくいき、今ではscotchboxgulpを使用できます。


0

私にとって、これらの答えはどれもうまくいきませんでした。理由はわかりませんが、それは私の共有がnf​​sであるためだと思います。そのため、管理者として実行してsetextradata設定を変更しても、シンボリックリンクを許可することができませんでした。--no-bin-linksに従うことに問題 があると思われるgulpおよびその他のパッケージで作業していました。それはまだいくつかのシンボリックリンクを作成しようとしていて、明らかに失敗していました。最後に、Githubのこのスレッドは、私を「ソリューション」に結び付けました。プロジェクトを「単純に」非共有フォルダーにインストールし、それをNODEPATHに設定しました。

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

警告は、サーバー全体と、パッケージの更新/変更のワークフローに影響することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.