0

私は現在 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 で何かできる方法があれば、喜んで引き受けます。通常のワークフローでテストしたいからです。

4

2 に答える 2