状況
Windowsでホストされている開発環境でgulpと関連するフロントエンドツールチェーンを使用したいと思います。node_modulesフォルダーグラフが扇形に広がり、Windowsファイルパスが長すぎてファイルをコピーできないため、Browser-Syncなどのgulpプラグインを使用しようとして壁にぶつかっています。Nodeコミュニティが将来、Windowsでのnpmの使いやすさを向上させるために何を提供するかどうかに関係なく、現在Windowsでこの問題を処理するための実用的なアプローチが必要です。
2つの質問
意図したとおりに機能するWindows用のnpmワークフローはありますか?「コマンドを実行してファイルをインストールする」(たとえば、OSXのnpm、Linuxのnpm、ruby gems、さらにはnugetに相当)使用するたびに手動でファイルを編集したり、シンボリックリンクなどをいじったりしたくありません。 Windowsではnpm。
Windows APIファイルのパス制限を回避するためのnpmとノード実行のための十分に文書化された安定したCygwinワークフローはありますか?
以下にリストされているゴーリーの詳細...
一般的な問題
- 標準のWindowsコマンドプロンプトからnpminstallを実行すると、深くネストされたnode_modules階層で失敗します。
- Joyentのgithubリポジトリスレッドによると、これは認識されている問題であり、Windows中心の環境の開発者にとっては好ましい回避策はありません。(本当に?)
- NTカーネルは、最大32,767文字のファイルパス長をサポートします。
- WindowsAPIのMAXPATHは260文字に制限されています。
- Windows APIは、エクスプローラー、CMD、Powershell、MYSgit bashなどを含まないすべての主要なWindowsシェルのファイル操作を処理します(MSは本当に?NTFSはどのくらいの期間使用されていますか?)
- Cygwinは長いファイルパスをサポートしていますが、crlf形式のため、npm.cmdはそのままでは機能しません。npmでDOS2Unixトランスフォームを試して、Cygwinで動作させましたが、これには他の問題があるようです。
私の現在のハック
- C:\のルートにステージング領域として「n」フォルダーを作成します。これにより、フォルダーパスが短くなります。
- 「n」フォルダー内でnpmを実行して、必要なモジュールをインストールします。
- Cygwinを起動し、cpを使用してnode_modulesフォルダーを宛先プロジェクトにコピーします。
- 依存関係が変更されたとき、または新しいプロジェクトを起動する必要があるときは、すすいで繰り返します。
その他の不快な回避策
シンボリックリンクを使用してファイルパスを短縮できますが、これらは厄介なハックです。npmエコシステムが成長するにつれて、ネストされた依存関係チェーンが長くなりすぎ、この回避策は使用できなくなります。
ルートフォルダーのpackage.jsonファイルにすべての依存関係を追加することは、私が遭遇した1つのスレッドで言及されました。このアプローチはフォルダー構造をフラットにし、重複するモジュールのロードを防ぎますが、この回避策は不自然に感じます。また、手動またはハッキーなスクリプトを使用して、インストール後にファイルやフォルダーをいじる必要があるため、npmの使いやすさ、耐久性、生産性が低下します。このアプローチは、シンボリックリンクアプローチが最終的に苦しむ可能性があるのと同じ運命に対しても脆弱です。