2012-10-16 8 views
9

Meine grunt.js eine typische minification Aufgabe hat:grunt.js - Mehrere Reiseziele wenn minifying Dateien

min: { 
    dist: { 
     src: ['dist/precook.js'], 
     dest: 'dist/precook.min.js' 
    } 
} 

Was ist der einfachste Weg, um mehrere Dateien dest haben? Ich möchte in minify:

  • dist/precook.min.js
  • Beispiel/js/Verkäufer/precook.min.js

Die built-in min task erscheint nicht mehrere zu unterstützen Ziele, so nehme ich an, dass dies durch eine einfache "Kopie" Aufgabe erreicht werden kann. Kann mir bitte jemand in die richtige Richtung zeigen?

Antwort

9

würde ich grunt-contrib-copy Plugin verwenden:

Installieren mit npm:

npm install grunt-contrib-copy 

Ändern grunt.js (Kopie Aufgabendefinition und Ladekopie-Plugin hinzugefügt werden):

... 
    copy: { 
     dist: { 
      files: { 
       'example/js/vendor/': 'dist/precook.min.js' 
      } 
     } 
    } 
    ... 

grunt.loadNpmTasks('grunt-contrib-copy'); 

Optional register copy in to grunt's default task.

Die zusätzliche Schönheit hier ist, dass Sie jetzt alle anderen Kopieraufgaben auch ausführen können. Sogar Muster werden unterstützt, wie alle verkleinerten Dateien kopieren ('dist/*.min.js').

+0

Perfekt, das ist genau das, was ich gesucht habe. Vielen Dank für die zusätzliche Reise bei der Registrierung einer standardmäßigen kombinierten Aufgabe! –

1

Dies ist ein alternativer Ansatz (neben @jalonen ‚s-Lösung), die für Sie interessant zu können, falls Sie requirejs verwenden, um Ihr Projekt modularisieren, dann können Sie die requirejs optimizer benutzen, um Ihre Module minify.

Zunächst einmal müssen Sie grunt-contrib-requirejs zu einem Projekt hinzuzufügen:

npm install grunt-contrib-requirejs --save-dev 

Grunt Konfiguration:

 requirejs: { 
      production:{ 
       options:{ 
        // don't include libaries when concatenating/minifying 
        paths:{ 
         angular:'empty:', 
         jquery:'empty:' 
        }, 
        baseUrl:'path/to/src/js', 
        dir:'path/to/target/js', 
        // keeps only the combined files 
        removeCombined:true, 
        modules:[ 
         {name:'app', exclude: ['moduleA', 'moduleB']}, 
         {name:'moduleA'}, 
         {name:'moduleB'} 
        ] 
       } 
      } 
     } 
     ... 

    grunt.loadNpmTasks('grunt-contrib-copy'); 

Erläuterung:

Angenommen, Sie haben diese Abhängigkeit haben Baum (-> bedeutet ist abhängig von):

app -> moduleA -> moduleA1 
       -> moduleA2    
app -> moduleB -> moduleB1 
       -> moduleB2    

Nach minifying Sie drei Dateien haben:

  • app (minimierte Version der App)
  • moduleA (minimierte Version von moduleA, moduleA1 und moduleA2)
  • moduleB (verkleinerte Version von moduleB, moduleB1 und moduleB2)
+0

Danke @asgoth. Ich habe mehr Erfahrung (0.4 ~) seit der ursprünglichen Frage und ich verwende jetzt "grunt-contrib-requireds" auf ähnliche Weise. –

0

haben ein ähnliches Problem und ein grunt multi-task erstellt, die

Verwendung für den genauen Fall eine Liste der genannten Aufgaben auf mehreren Verzeichnissen läuft: `` `

min: { 
    dist: { 
     src: ['dist/precook.js'], 
     dest: 'dist/precook.min.js' 
    } 
}, 
multidest: { 
    minifiedFiles: { 
     tasks: ['min'], 
     dest: [ 
      'dist/precook.min.js', 
      'example/js/vendor/precook.min.js' 
     ] 
    } 
} 

` ``

5
concat: { 
      css: { 
       src: ['UI.controls/assets/css/*.css'], 
       dest: 'UI.controls/assets/css/min/production.css' 
      }, 

      js: { 
       src: ['UI.controls/assets/js/*.js'], 
       dest: 'UI.controls/assets/js/min/production.js' 
      }, 

      js2: { 
       src: ['UI.core/assets/js/*.js'], 
       dest: 'UI.core/assets/js/min/production.js' 
      } 

     }, 

     cssmin: { 
      css: { 
       src: 'UI.controls/assets/css/min/production.css', 
       dest: 'UI.controls/assets/css/min/production.min.css' 
      } 
     }, 

     uglify: { 
      js: { 
       src: 'UI.controls/assets/js/min/production.js', 
       dest: 'UI.controls/assets/js/min/production.min.js' 
      }, 

      js2: { 
       src: 'UI.core/assets/js/min/production.js', 
       dest: 'UI.core/assets/js/min/production.min.js' 
      } 
     }, 


     watch: { 
      css: { 
       files: ['UI.controls/assets/css/*.css'], 
       tasks: ['concat:css', 'cssmin:css'] 
      }, 
      js: { 
       files: ['UI.controls/assets/js/*.js'], 
       tasks: ['concat:js', 'uglify:js'] 
      }, 

      js2: { 
       files: ['UI.core/assets/js/*.js'], 
       tasks: ['concat:js', 'uglify:js'] 
      } 

     }