web-dev-qa-db-ja.com

Nodejs + npm、ntfsパーティションへのモジュールのインストール

Npmモジュールをインストールするときに問題が発生します。 NodeJSは、Windowsホスト上のVirtualBoxで実行されているUbuntu11.10にインストールされます。私のプロジェクトファイルはNTFSパーティションにあります(Windowsと共有する必要があります)。 npmモジュールをインストールしようとするとエラーが発生し、モジュールがインストールされません。 npmがシンボリックリンクを作成しようとすると問題が発生することがわかりました。

おそらく、NTFSパーティションにシンボリックリンクを作成することはできません。Linuxファイルシステムの「内部」にモジュールをインストールすると、すべてが正常に機能します。

どうすればこれを修正できますか?依存関係を手動で解決したくない:/

35
Sosnowski

バージョン1.2.21以降、npmにはinstallコマンドの新しいオプションがあります。 --no-bin-links

特定のノードモジュールをインストールする場合に使用できます

npm install express --no-bin-links

また、package.jsonのインストール用

npm install --no-bin-links

このオプションを使用すると、VM(Ubuntuゲスト、Windowsホスト)内の共有フォルダーに問題なく多くのnpmモジュールをインストールできました。

オプションがnpmコードに追加されたコミットは b4c58617039c21c10889a9869f8e86a23e17d3a

55
blackjid

これを試してください- http://ahtik.com/blog/2012/08/16/fixing-your-virtualbox-shared-folder-symlink-error/

私のために働く!

基本的にはパラメータを設定します

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

次に、VMを管理者として実行します..。

5
Mahbub

シンボリックリンクのアクセス許可、または--no-bin-linksが機能しませんでした。代わりに、node_modules/vagrant共有から移動することを選択しました。 /vagrant/node_modulesから/tmp/node_modulesへのシンボリックリンクを作成しました。 これは、node_modulesがバージョン管理されていない場合にのみ実行できます。チェック this 最初に!

http://kmile.nl/post/73956428426/npm-vagrant-and-symlinks-on-windows も参照してください。

5
Kamiel Wanrooij

共有ドライブ(「共有フォルダ」)にシンボリックリンクを作成できないことは間違いありません。 WindowsホストマシンとLinuxゲストではさらに不可能です。

Hostマシンは、guestsのファイルシステムを認識していません。ゲストマシンは、ホストのブラックボックスです。ホストがこの/etc/...がどこにあるかわからない場合、ホスト「これは/etcにリンクします」と言うことはできません:)。

つまり、残念ながらありません。


もう少し詳しく:

間違っていたら本当に嬉しいです!それは私の開発プロセスにおける大きな苦痛です。

私はたくさんのオプションを試しました。デフォルトでは、 "共有フォルダー"が使用するファイルシステムはvboxsfであり、samba( Windows用のデフォルトのネットワーク共有プロトコル)そう:

  1. ネイティブWindowsネットワーク共有を使用して、ゲストとホストが同じネットワーク上にあるため、ゲストにネットワークドライブをマウントしてみました。 問題はまだありました
  2. WindowsでNFSサーバーを実行(Hanewin NFSサーバー)とSFU/SUA(Windows Services for UNIX)を試しましたが、GITロックに問題があります。おそらく他の問題も-それは少し前のことで、はっきりと覚えていません
  3. 私はその逆を試しました。仮想マシン上のディレクトリをWindowsと共有することです。しかし、それはすべてのファイルが仮想ボックス上にあるので愚かですそしてWindowsでのアクセスが本当に遅い
  4. 私は愚かでしたが、「WindowsとLinuxの両方に仮想ドライブをマウントしましょう」-これを試さないでください。仮想ディスクが破損します。私が知っておくべきこと。

sambanfs以外のネットワーク共有プロトコルがあり、「シンボリックリンク」の作成が試行されるたびにファイルをコピーする可能性がありますか?よくわかりません。

しかし、まだ見つけていません。また、 "locking"はファイルシステム自体のタスクのようであるため、ネットワークプロトコルを疑っています(ロック専用のレジストリがない限り)これを行うことができます。

3
antitoxic

_npm install --no-bin-links_を試した後もまだこの問題を抱えている人のために。

VirtualBoxを使用してWindows7ホストのLaravel Homestead Vagrantボックスで_npm install_を実行している同様の問題に遭遇したとき、上記のソリューションのいずれも機能させることができませんでした。ゲストボックスには、Windowsファイルシステムにマップされたディレクトリがあります。

この問題は、さまざまなエラーメッセージを引き起こし、パッケージのインストールに失敗していました。質問に最も関連するのは_npm ERR! UNKNOWN, symlink '<some filename>'_でした。

これを修正するために、ゲストLinuxではbashではなく、WindowsのGit bashコマンドラインで_npm install_を正常に実行できました。

これを行うには、Git for WindowsとNodeJS(両方ともWindowsボックスに)をインストールする必要があります。

例えば.

  1. Chocolateyをインストールする https://chocolatey.org/
  2. _choco install nodejs.install_
  3. _choco install git.install_
  4. C:\Program Files (x86)\Git\Git Bash.vbsを実行します
  5. Git Bashコマンドラインで、ディレクトリをpackage.jsonファイルの場所に変更します。 _cd /c/projects/projectname_
  6. _npm install_を実行します

すべてが正常にインストールされているようです。

1
user679744

fsutil動作セットSymlinkEvaluationL2L:1 R2R:1 L2R:1 R2L:1

このコマンドは、Windowsでシンボリックリンクを有効にします。最後の訪問時の不可解なコマンドのより良い説明については: サーバー2008でシンボリックリンクのターゲットを取得するときに、「シンボリックリンクはタイプが無効になっているためフォローできません。」エラーを克服するにはどうすればよいですか?

要約すれば

Fsutil動作セットSymlinkEvaluationの動作コード(つまり、L2L、L2R、R2L、およびR2R)は、次のことを意味します。

Lは「ローカル」を表し、Rは「リモート」を表します(誰がサンクしたでしょうか?)最初のLまたはR(2の前)は、マシンに対する(ターゲットではなく)リンク自体の位置を示します。リンクへのアクセス。 2番目のLまたはR(2の後)は、リンク自体が配置されているマシンに対するリンクのターゲットの位置を示します。

0
newtexie

ネイティブモジュール(C/C++からコンパイル)を使用しない場合は、Ubuntu VM)でnpmを使用し、node_modulesフォルダーをWindowsドライブにコピーできます。

0
muffel