package.json
の scripts
プロパティでスクリプトを定義しておくと、任意のコマンドを npm run
コマンド経由で実行できるようになります。
このスクリプト定義は便利なので、例えば、下記のようにファイルのコピーや削除を行うスクリプトを定義したくなるかもしれません。
{
"scripts": {
"copy": "xcopy /S /H /Y static\\** build\\"
}
}
この copy
スクリプトを下記のように実行すると、static
ディレクトリ内のファイルが build
ディレクトリにすべてコピーされます。
D:\> npm run copy
しかし、xcopy
コマンドは Windows のコマンドなので、Linux などで同様のことを行うためには、下記のように別のスクリプトを用意しなければいけません。
{
"scripts": {
"copy-win": "xcopy /S /H /Y static\\** build\\",
"copy-linux": "mkdir -p ./build && cp -pR ./static/* ./build"
}
}
Toru Nagashima さんの作成した cpx
という NPM パッケージを使用すると、ファイルのコピー処理を汎用的に記述することができます。
同様のことを行える copyfiles
という NPM パッケージもあるのですが、ここでは使い方がよりシンプルな cpx
を採用することにします。
NPM のパッケージとして公開されている cpx
コマンドを使用すると、OS に依存しないファイルのコピーを行うことができます。
cpx
を使用すると、グロブ形式でコピーするファイルを指定できたり、コピー先のディレクトリを自動生成してくれたりします。
cpx
は下記のように開発用のコマンドとしてインストールしましょう。
$ npm install --save-dev cpx
これにより、ローカルの node_modules/.bin
ディレクトリに cpx
コマンドがインストールされ、package.json
の devDependencies
プロパティに依存関係情報も追加されます。
cpx
コマンドは、package.json
で定義するスクリプト内から下記のように呼び出すことができます。
{
"scripts": {
"copy": "cpx -C static/** build"
}
}
cpx
コマンドの実体は、node_modules/.bin
ディレクトリ以下にインストールされているのですが、npm
実行時にこのディレクトリに自動的にパスが通るようになっているので、上記のようにコマンド名だけを直接指定できるようになっています。
これで、次のように実行するだけで、static
ディレクトリ内のファイルを build
ディレクトリに丸ごとコピーできます。
$ npm run copy
ここでは cpx
の -C
オプションを指定していますが、このオプションを指定すると、コピー元に存在しないファイルが、コピー先のディレクトリから削除されます(ゴミファイルが残るのを防げます)。
明示的にディレクトリを削除したい場合は、rimraf を使用してディレクトリを削除 するようにしましょう。