私は現在 Grunt を使用しており、Gulp を試していたときに、Grunt で最初に遭遇したのと同じ問題が発生しました。
いくつかの js ファイルを処理しようとしています (concat、uglify、および minify) が、それらすべてを 1 つの大きなファイルにコンパイルするのではなく、いくつかの入力ファイルの処理からそれぞれ複数の出力ファイルが必要です。
scripts =
firstOutput:
outputFilename: 'first.min.js',
inputFiles: ['one.js', 'two.js']
secondOutput:
outputFilename: 'second.min.js',
inputFiles: ['three.js']
thirdOutput:
outputFilename: 'third.min.js',
inputFiles: ['four.js', 'five.js']
Gruntでそれを達成するために(今のところ)見つけた唯一の方法は、複数のウォッチと複数のuglifyタスク(または1つのuglifyタスクとウォッチ変更のリスナーを使用して、uglifyタスクのsrcとdestを動的に変更することです):
module.exports = (grunt) ->
grunt.loadNpmTasks 'grunt-contrib-watch'
grunt.loadNpmTasks 'grunt-contrib-uglify'
grunt.initConfig
watch:
firstOutput:
files: scripts.firstOutput.inputFiles
tasks: ['uglify:firstOutput']
options :
spawn : false
secondOutput:
files: scripts.secondOutput.inputFiles
tasks: ['uglify:secondOutput']
options :
spawn : false
thirdOutput:
files: scripts.thirdOutput.inputFiles
tasks: ['uglify:thirdOutput']
options :
spawn : false
uglify:
firstOutput:
files: scripts.firstOutput.inputFiles
dest: scripts.firstOutput.outputFilename
secondOutput:
files: scripts.secondOutput.inputFiles
dest: scripts.secondOutput.outputFilename
thirdOutput:
files: scripts.thirdOutput.inputFiles
dest: scripts.thirdOutput.outputFilename
grunt.registerTask 'default', 'watch'
そして、ご想像のとおり、これは単なる例です。私の大きな Web アプリケーションの場合、出力される js ファイルは 3 つだけではなく、さらにいくつかのファイルをいくつかの css ファイルに処理します。
私の Gruntfile は非常に巨大で、多くの重複コードがあることがわかりました。このコードをリファクタリングして、ある種の依存関係を持つ自動的に推測される src と dest を使用して、1 つの watch タスクと 1 つの uglify タスクを作成する方法はありますか? four.js ファイルが変更された場合、3 番目の出力を処理する必要があります) ?
Gulp で何かできる方法があれば、喜んで引き受けます。通常のワークフローでテストしたいからです。