91

奇妙な問題に遭遇しました - どうやら一部の Node.js モジュールはフォルダー階層が非常に深いため、パスが 250 を超えると、Windows のコピー コマンド (または実際に使用している PowerShell のコマンドCopy-Item) で悪名高い「パスが長すぎます」というエラーが発生します。文字の長さ。

たとえば、これは単一の Node モジュールで作成できるフォルダー階層です。

node_modules\nodemailer\node_modules\simplesmtp\node_modules\
xoauth2\node_modules\request\node_modules\form-data\node_modules\
combined-stream\node_modules\delayed-stream\...

ばかげているように見えますが、Node モジュールでは現実です。

展開中にコピー アンド ペーストを使用する必要があり (Heroku のように、Git 展開がオプションとなる「巧妙な」ターゲット プラットフォームは使用していません)、これは Windows での重大な制限です。

node_modulesフォルダを圧縮したり、実行時に実際に必要なものだけを含めたりする npm コマンドなどはありませんか? (ノードモジュールには通常、test展開する必要のないフォルダーなどが含まれています。)それを回避する方法はありますか? 残念ながら、Windowsを使用しないという選択肢はありません:)

4

8 に答える 8

38

あなたの制約を考えると、素晴らしい解決策はないと思いますが、役立つかもしれないことがいくつかあります。

  • を使用npm dedupeしてディレクトリ階層を最適化すると、一部のパスが短くなる可能性があります
  • npm install --production開発ツールなしでインストールするために使用
  • これらの深くネストされた依存関係のいくつかを取り (問題を回避するのに十分だと思います)、それらを最上位の node_modules ディレクトリに移動します。それらを追跡して、どれが真の依存関係であり、どれがこの問題の回避策であるかを把握してください。
  • または、これらの深い依存関係の一部をそのnode_modules下の最上位のディレクトリに移動するyour_project/node_modules/pkg_with_deep_depsと、十分に短いパスを持つことができますが、それでも機能します。したがって、これは になりますyour_project/node_modules/pkg_with_deep_deps/node_modules
    • require実行時にそれらを適切に見つけることができるはずだと思います。手動で変更した内容、変更した理由を明確に文書化し、独自の真の依存関係を正確に表現しておく必要があります。package.json

これは、この問題について詳しく説明している github issue のディスカッションです。

于 2012-11-10T02:39:13.957 に答える
24

npm v3 (最近リリースされた) は、依存関係を平坦化することでこの問題を解決します。セクションの下のhttps://github.com/npm/npm/releases/tag/v3.0.0のリリース ノートを確認してくださいflat flat

そして、この問題に関する最後のコメントhttps://github.com/npm/npm/issues/3697

于 2015-07-07T11:14:43.797 に答える
1

1) リリース ビルド中に、フォルダー プロパティを隠しフォルダーとして設定することで、Visual Studio がこれらのファイル/フォルダーをスキャンするのを防ぐことができます(node_modules に設定するだけです)。参照: http://issues.umbraco.org/issue/U4-6219#comment=67-19103

2) CsProject ファイルに次の XML ノードを含めることにより、パッケージ化中に公開されたファイルまたはフォルダーを除外できます。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <OutputPath>bin\</OutputPath>
   <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
  <ExcludeFilesFromDeployment>File1.aspx;File2.aspx</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2</ExcludeFoldersFromDeployment>
</PropertyGroup>
于 2015-10-12T19:38:52.427 に答える
1

Microsoft Node.js Guidelinesから 1 つの解決策を見つけました。

  • 短いパスで開始します (例: c:\src)
  • > npm install -g rimrafを超えるファイルを削除するmax_path
  • > npm dedupe重複するパッケージを最上位に移動します
  • > npm install -g flatten-packagesすべてのパッケージを最上位に移動しますが、バージョン管理の問題が発生する可能性があります
  • フォルダ階層を最大限にフラットに npm@3するためのアップグレード。node_modules
    • Node v5 に同梱
    • または…> npm install –g npm-windows-upgrade
于 2015-11-16T12:10:25.813 に答える
0

これは適切な解決策ではなく、急いでいる場合の回避策ですが、7-Zipを使用してフォルダーを圧縮し、圧縮されたファイルを移動して、問題なく解凍できます。

このソリューションを使用して、npm のクリーン インストールを実行できない Node.js アプリケーションをデプロイしました。

于 2014-10-08T15:51:15.563 に答える