module.exports = function(grunt){ 'use strict'; var path = require( 'path'); grunt.registerMultiTask( 'copy'、 'Copy files。'、function(){ var kindOf = grunt.util.kindOf; var options = this .options({ processContent:false、 processContentExclude:[] }); var copyOptions = { process :options.processContent、 noProcess:options.processContentExclude }; grunt.verbose.writeflags(options、 'Options'); var dest; var isExpandedPair; var tally = { dirs:0、 files:0 }; this.files.forEach(function(filePair){ isExpandedPair = filePair.orig.expand || false; filePair.src。 forEach(function(src){ if(detectDestType(filePair.dest)=== 'directory'){ dest = (isExpandedPair)? filePair.dest:unixifyPath(path.join(filePair.dest、src)); } else { dest = filePair.dest; } if(grunt.file.isDir(src)){ grunt.verbose.writeln( 'Creating' + dest.cyan); grunt.file.mkdir(dest); tally.dirs ++; } else { grunt.verbose.writeln( 'Copying' + src.cyan + '->' + dest.cyan); grunt.file.copy(src、dest、copyOptions); tally.files ++; } }); });
展開では、宛先パスを完全に作成するかどうかを指定できます(例:/path/missing1/missing2
)、または親が存在する場合にのみ最後のディレクトリを作成します(/path/existing/missing
)。
expand
はGruntの一部であり、grunt-contrib-copyに固有ではないため、それに関する情報は Gruntのファイル構成API にあります。
expand
をtrue
に設定して、以下のオプションを有効にします。
cwd
すべてのsrc
の一致は、このパスに関連しています(ただし、含まれません)。src
一致するパターン(cwd
に関連)。dest
宛先パスのプレフィックス。ext
生成されたdest
パスの既存の拡張子をこの値に置き換えます。extDot
拡張子を示すピリオドの場所を示すために使用されます。'first'
(ファイル名の最初のピリオドの後に拡張子が始まる)または'last'
(最後のピリオドの後に拡張子が始まる)のいずれかを取ることができ、デフォルトで'first'
に設定されます。flatten
生成されたdest
パスからすべてのパス部分を削除します。rename
この関数は、一致するsrc
ファイルごとに呼び出されます(拡張子の名前変更とフラット化の後)。dest
および一致したsrc
パスが渡され、この関数は新しいdest
値を返す必要があります。同じdest
が複数回返された場合、それを使用した各src
は、そのソースの配列に追加されます。
さらに、dest
をexpand
に設定すると、true
は常に宛先ディレクトリーと見なされるようです。