node_modulesディレクトリをOneDrive同期から除外する方法は?


8

私はフロントエンド開発者であり、フロントエンドプロジェクトをOneDriveに保持しています。Node.jsが依存関係を整理する方法により、各プロジェクトにはnode_modules数十メガバイトの小さなファイルが含まれるディレクトリがあり、同期に永遠に時間がかかります。

node_modulesプロジェクトをOneDriveに保持しながらディレクトリの同期を回避するにはどうすればよいですか?

回答:


6

これは古い質問であることは知っていますが、同じ問題にぶつかりました。私が出会った解決策は、最初に空のnode_modulesフォルダーを作成し、それをクラウドと同期することでした。

空のフォルダーが同期されたら、次に

OneDrive設定→フォルダーの選択

node_modulesフォルダーの選択を解除しました。

その後npm install、プロジェクトのルートフォルダーで実行すると、OneDriveはクラウド内のフォルダーのコンテンツとの競合を検出します。同期しません。

同期エラーの画像

このアプローチの欠点は、OneDriveが同期エラーを生成することですが、私のニーズにはうまく機能しているように見えました。


2019年3月の時点で、これは私が見つけた最良の答えです。理想的ではありませんが、機能的です。
タウル

2019年7月現在:「ファイルまたはフォルダーが既に存在します」に関する同期エラーが発生している場合は、OneDrive Web UIに移動して、node_modulesフォルダーを削除します。そこにある場合、OneDriveはそれらが異なると文句を言います。クラウドにない場合、違いはなく、ODは文句を言いません。
トマーシュ・カフカ

5

バックグラウンド

OneDriveでは、名前でディレクトリを除外することはできません。これは間もなく変更されないものです。

[UserVoiceリクエストに対するOneDriveの代表的な応答:]現時点ではありません

OneDriveの設定で同期したくないディレクトリのチェックを外すこと推奨するもいますが、OneDrive Files on-demandではそれが不可能になりました。

解決

ただし、Node.js側で調整することでこれを解決できます。作成しnode_modulesたディレクトリにファイルを別の場所へのシンボリックリンクを:

# Open any place outside OneDrive
cd D:\node_dependencies
# Make a symlink target. After linking, node_modules for your project 
# will be installed here
mkdir node_modules_for_my_project

# Open the project directory
cd <the project directory>
# Make a *file* link from node_modules to the newly created directory.
# You will need to delete existing node_modules directory if it exists
cmd /C "mklink node_modules D:\node_dependencies\node_modules_for_my_project"

ここでの重要な部分は、あなたが作成することで、ファイルのシンボリックリンクではなく、ディレクトリ 1を。OneDriveはこのシンボリックリンクを認識および同期しませんが、Node.jsは意図したとおりに動作します。

npmインストールとNode.jsが意図したとおりに動作する必要があることを示すスクリーンショット

OneDrive v17.3.7101.1018およびOneDrive Files on-demandを有効にしてテスト済み。

欠点

これは普遍的な解決策ではありません。これの欠点は、エクスプローラー、Powershellおよびその他のツールがnode_modulesディレクトリとして認識しないことです。

エクスプローラーがnode_modulesをショートカットアイコン付きの認識されないファイルとして表示することを示すスクリーンショット

ただし、Node.jsベースのコードエディターは問題なく読み込めます。

node_modulesディレクトリを展開したVisual Studioコードのスクリーンショット


これは機能しないようです。Cannot find module(Typescriptを使用して)アプリを起動しようとするとエラーが発生します。
ピエリックビッグネット

@PierrickBignet推測:シンボリックリンクを処理するように設計されていないネイティブコードを間接的に実行するため、シンボリックリンクを作成するには特権が必要です。
no1xsyzy

1

Typescriptユーザーの場合は、node_modulesをパスに追加して、モジュール解決の問題を回避してください。

tsconfig.jsonに以下を追加します。

"paths": {
  [... some paths ...],
  "*": [
    "node_modules/*"
  ]
}

編集:まだいくつかの問題があります。プロジェクトをビルドできますが、ts-nodeおよびnodemonでCannot find moduleエラーが発生します。さて、これはまだ問題です:(


1

プロジェクトが保存され、モジュールがインストールされるOneDriveフォルダーの外側に「ローカル」フォルダーを作成することが最善の解決策であることがわかりました。これが実際のプロジェクトです。

OneDriveに同期するには、手動で「パラレル」フォルダーを作成し、「RoboCopy」を使用して必要なコンテンツのみをコピーします。その後、このタスクをスケジュールできます。

無視するファイルとフォルダーの名前/ワイルドカードは、.gitignoreファイルからコピーされました

ソリューションは、いくつかの記事に基づいています。

RoboCopyタスクのスケジュールと簡単な例

MicrosoftによるRoboCopyドキュメント

GUIを使用して、スケジュールする.batタスクファイルを作成することもできます。はるかに優れたMicrosoftChoEazyCopy GUIによるGUI

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