web-dev-qa-db-ja.com

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

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

Windows 8ホストでフォルダーを共有し、fstabの次のエントリを使用して、起動時にUbuntuゲストにマウントされます。

//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  [email protected] { [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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

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

52
F21

--no-bin-linksで実行すると修正されました:

npm install --no-bin-links

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

117
F21

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

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

Cmdプロンプトで実行:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

次に確認してください:

VBoxManage getextradata YOURVMNAME enumerate

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

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

6
matiangul

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のバグ この問題を追跡しています。

3
hao

VirtualBoxをAdminstratorとして起動した場合、VirtualBoxの新しいバージョンではシンボリックリンクを許可する必要があります(右クリック:管理者として実行)。

浮浪者ボックスにも同じことが当てはまります:cmd.exe/PowerShellを管理者として実行するだけで準備完了です。

1
lorem monkey

in このnpmの問題 @drmyersiiは素晴らしい解決策を提供します。答えだけをリンクしないようにコピーして貼り付けるだけです。

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

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

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

0
Edu Ruiz

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

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

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

0
Melissa