IT the Best

はてなブログのカスタマイズ情報を中心に、WEBデザインからJavaScriptまでWEB系の開発情報を発信します。便利ツールや暇つぶしのゲームなど開発物も公開します。

node.jsプロジェクトでnode_modulesを除外してコピーの速度を大幅に速くさせる バッチファイル | Windows

f:id:Surprisedblog:20210801220421j:plain

Photo by Juanjo Jaramillo on Unsplash

今回はnode.jsプロジェクトのバックアップファイルと取るときの作業効率化情報です。

 

 

node.jsプロジェクトのコピーは時間がかかる

node.jsプロジェクトで作成したソースファイル(JavaScriptなど)のバックアップを取ろうとして、プロジェクトごとコピーしたところ、node_modulesのファイル数が多くコピーにものすごく時間がかかりました。

 

そこで、node_modules(.cacheも)を除外してコピーを行うことができないかと思い、今回のバッチファイルを作成してみました。

 

node_modulesのファイル数

node.jsプロジェクトではnpmパッケージを使用してプロジェクトに必要なモジュールをインストールすると思います。例えば、jQueryを使用したい場合は

npm install jquery

とすると思います。

 

このように、インストールした機能のプログラムはnode_modulesというフォルダが作成されそのなかに保存されます。

 

JavaScriptなどのファイルが保存されるのですが、そのファイル数がとんでもなく多いです。また.cacheというフォルダも作成されこの中のファイルの数も開発を行なっていると多くなっていきます。

 

 

xcopyコマンドでコピーする

node_modulesと.cacheフォルダ内のファイルが原因で、エクスプローラでコピーを行うと処理時間がものすごくながくなってしまいます。(PCのスペックが低いということもありますが...)

 

そこで、xcopy(winodwsコマンド)を使用して短い時間でファイルのコピーを行います。

 

除外対象のフォルダを指定する

xcopyコマンドでは、node_modulesや.cacheなどをコピー元から除外することができます。除外ファイルやフォルダの指定はtxtファイルとして作成します。

 

例えば、node_modulesと.cachewo除外する場合は、

node_modules
.cache

という内容のテキストファイルを準備します。

 

そして以下のようなコマンドを実行すれば、除外ファイルを参照してコピー元から指定したファイルやフォルダを除外してくれます。

xcopy /exclude:excludeList.txt [コピー元] [コピー先]

 

xcopyのオプション

/Pでコピー元のファイルを一つ一つ確認したり、xcopyにはさまざまなオプションがあります。

 

例えば、上書きするファイルだけは確認がしたい、などの場合は、/-Yを指定します。

/-Yを使用すれば、上書きするファイルだけ確認メッセージを表示してくれるので、上書きするかどうか選択することができます。

 

以下はそのオプションの一部です。

f:id:Surprisedblog:20210801213500p:plain

image by https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/xcopy

 

詳細については公式サイトをご覧ください。

docs.microsoft.com

 

 

除外されたnode_modulesはどうするのか

除外したのでコピー先にはもちろんnode_modulesフォルダは存在しません。コピー先のnode.jsプロジェクトを開発しようとしてもモジュールが存在しないためエラーが発生すると思います。

 

node_modules、その中のファイルは存在しませんが、npmでインストール可能なので再度インストールします。使用していたモジュールは、package.jsonというファイルに列挙されてあるので、以下のコマンドを実行すれば列挙されたモジュールが勝手にインストールがされるはずです。

npm init

 

 

 

終わりに

今回は、Windowsコマンドでコピーの仕方を変えて処理時間を大きく改善することができ作業効率化につながりました。しかし、コマンドで行なった処理は取り消しがきかないと聞いたことがあるので注意が必要です。