2016-08-09 155 views
1

Ich versuche dynamic mapping UND concat Javascript Dateien mit Grunt verunstalten zu verwenden.Dynamic Mapping und Concat mit Grunt uglify

Ich habe die folgenden, die nicht richtig funktioniert.

Hier ist meine Ordnerstruktur:

javascript 
    |- account 
     |- custom.js 
    |- bills 
     |- billing-one.js 
     |- billing-two.js 
    |- test (output folder) 

Hier ist, was ich erwarte:

javascript 
    |- account 
     |- custom.js 
    |- bills 
     |- billing-one.js 
     |- billing-two.js 
    |- test 
     |- billing-one.min.js (this file includes billing-one.js AND custom.js) 
     |- billing-two.min.js (this file includes billing-two.js AND custom.js) 

Dies ist, was ich zur Zeit bin immer:

javascript 
    |- account 
     |- custom.js 
    |- bills 
     |- billing-one.js 
     |- billing-two.js 
    |- test 
     |- bills 
      |- billing-one.min.js (this file includes just billing-one.js) 
      |- billing-two.min.js (this file includes just billing-two.js) 
     |- account 
      |- custom.min.js (this file includes just custom.js) 

Es ist die custom.js Datei nicht mit, sondern erstellt einen 2 Ordner test/account/custom.min.js ‚test/Rechnungen/bi Befüllungs-one.js' - siehe oben

options: { 
    beautify: true, 
    mangle: false, 
    compress: false, 
    preserveComments: 'all' 
}, 
files: [ 
    { 
    expand: true,  // Enable dynamic expansion. 
    cwd: 'javascript/',  // Src matches are relative to this path. 
    src: [[bills/*.js'], 'account/custom.js'], // Actual pattern(s) to match. 
    dest: 'test/', // Destination path prefix. 
    ext: '.min.js', // Dest filepaths will have this extension. 
    extDot: 'first' // Extensions in filenames begin after the first dot 
    }, 
], 

Ich möchte, dass alle JavaScript-Dateien im Ordner bills/ custom.js

So enthalten, wenn es zwei Dateien: bills/billing-one.js bills/billing-two.js

Ich würde erwarten, dass Test/Ordner

test/billing-one.min.js enthält (diese Datei würde billing-one + custom.js enthalten) test/billing-two.min.js (diese Datei enthalten würde abrechnungs zwei + custom.js)

Ich will nicht zu hart Code der Dateinamen. Wenn mehrere Dateien bills/ Ordner hinzugefügt werden, sollten die auf die test/ Ordner verketten und ausgegeben werden.

Jede Hilfe sehr geschätzt.

UPDATE SEIT ANTWORT AKZEPTIERT:

Verwenden Sie den aktualisierten Code folgen, um sicherzustellen, das funktioniert wie beabsichtigt - sonst werden Sie in Fehler ausgeführt werden, wenn GRUNZEN läuft.

Ich habe versucht, auf die Antwort Hinzufügen dieser durch bearbeitet zur Überprüfung eingereicht. Aber es wurde zweimal abgelehnt, von all den wissenden, alles überragenden Mods ... wenn es tatsächlich eine gültige Eingabe ist und die gegebene Antwort verbessert. Beachten Sie die [], cwd und src Änderungen.

files: [{ 
    expand: true, 
    cwd: 'javascript/bills/', 
    src: ['*.js'], 
    dest: 'test/', 
    ext: '.min.js', 
    extDot: 'first' 
}], 

Antwort

1

Sie können die Banner-Eigenschaft von grunt-contrib-uglify verwenden, um den Inhalt anzufügen. Hier https://github.com/gruntjs/grunt-contrib-uglify#banner

ist die Grunzen Konfiguration:

grunt.initConfig({ 
 
    uglify: { 
 
     options: { 
 
     banner: grunt.file.read('./javascript/account/custom.js'), 
 
     beautify: true, 
 
     mangle: false, 
 
     compress: false, 
 
     preserveComments: 'all' 
 
     }, 
 
     files: { 
 
     expand: true, 
 
     cwd: 'javascript/', 
 
     src: ['bills/*.js'], 
 
     dest: 'test/', 
 
     ext: '.min.js', 
 
     extDot: 'first' 
 
     }, 
 
    } 
 
    });

In der obigen Konfiguration jede Datei in den Rechnungen Ordner den Inhalt custom.js im Banner Eigenschaft konfiguriert bekommen.

Ich hoffe, es hilft Ihnen.

+0

Danke - funktioniert gut. Ich habe die Dokumente durchsucht und versucht, eine Möglichkeit zu finden, mehrere Dateien in das Banner einzufügen, zum Beispiel: banner: grunt.file.read ([./javascript/account/custom.js], ./javascript/account- 2/custom.js]), 'Aber das funktioniert nicht. – fidev

+0

Es wurde eine Arbeit für den obigen Kommentar gefunden, indem Sie concat für mehrere Dateien verwenden und dann die Datei in das Banner einfügen – fidev