2016-04-09 11 views
0

Ich erstelle einen komplexen Yeoman Generator und ich muss eine existierende Gruntdatei lesen und modifizieren.Wie grunfile programmatisch zu lesen und zu analysieren, damit ich es ändern und erneut speichern kann?

Jede JavaScript-Methode zum Parsen einer Gruntdatei genügt.

Jede Hilfe wird geschätzt.

+0

Was möchten Sie ändern? Das Konfigurationsobjekt? Oder fügen Sie benutzerdefinierte Funktionalität auf einer modularen Basis hinzu? – theaccordance

+0

Ich muss mehr Pfade zu bestehenden Aufgaben browserify, sass und uglify hinzufügen – melanke

+0

Wie viel Kontrolle haben Sie über das gesamte Gerüst des Projekts? – theaccordance

Antwort

2

ich glaube nicht, dass Sie das erreichen können, indem Sie js-Dateien analysieren und eine neue Gruntdatei erzeugen.

Anstatt dies zu tun, können Sie versuchen, Vorlagedateien zu erstellen. .jade (oder eine andere Vorlage-Engine), so können Sie die endgültige gruntfile erzeugen, können Sie in grunt Konfigurationsobjekt grunt.config suchen und schließlich Informationen lesen, interpolieren Daten in Ihre Vorlage (n) und produzieren die endgültige gruntfile.js.

+0

Sie sagen also, ich sollte 'grunt.config' verwenden, um eine vorhandene grunt-config zu lesen/schreiben, aber es ist nur möglich grunt.config in gruntfile.js zu verwenden, also sollte ich es in einer json-Datei speichern, die ich leicht lesen kann . – melanke

+0

können Sie es als Modul "anfordern" und die Objekteigenschaften und Methoden durchsuchen. – Gntem

0

Danke Jungs für die Tipps, tolle Ideen, mit Führung kam ich für jede Konfiguration eine JSON-Datei mit bis:

module.exports = function(grunt) { 

    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     browserify: grunt.file.readJSON('browserify.json'), 
     uglify: grunt.file.readJSON('uglify.json'), 
     sass: grunt.file.readJSON('sass.json'), 
     cssmin: grunt.file.readJSON('cssmin.json'), 
    }); 

    grunt.loadNpmTasks('grunt-browserify'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-contrib-sass'); 
    grunt.loadNpmTasks('grunt-contrib-cssmin'); 

    grunt.registerTask('default', ['browserify', 'sass']); 
    grunt.registerTask('production', ['browserify', 'sass', 'uglify', 'cssmin']); 

}; 

Jetzt kann ich die Konfiguration

1

ist leicht ändern Hier einen modularen Ansatz zu grunzen, dass Sie verwenden können, ohne gruntfile.js jedes Mal ändern müssen, wenn Sie neue Aufgaben, Plugin oder benutzerdefinierte hinzufügen.

  1. load-grunt-tasksnpm module als Entwickler Abhängigkeit hinzufügen: npm install load-grunt-tasks --save-dev. Dieses Plugin ermöglicht es Ihnen, alle Ihre Grunt-Abhängigkeiten mit einer Codezeile zu laden.

  2. Geben Sie einen Ordner in Ihrem Projekt an, der alle Ihre modularen Konfigurationsdateien enthält. In diesem Beispiel wird der Pfad grunt/configs/ verwendet. Der Name jeder JSON-Datei sollte mit dem Namen der Eigenschaft in der grunt-Konfiguration übereinstimmen. Zum Beispiel sollte die Config für grunt-copy-configgrunt/configs/copy.json

  3. kopieren kann die gruntfile.js ich als public gist gepostet habe (Stack-Überlauf wurde den Code nicht richtig Formatierung). Diese Gruntdatei lädt automatisch Ihre Plugins und kompiliert ein Konfigurationsobjekt unter Verwendung der package.json Datei des Projekts und jeder .json Datei, die in grunt/configs/ gefunden wird. Die gruntfile auch benutzerdefinierte Aufgaben lädt ich in grunt/tasks/

Als alternative Option gespeichert haben - Sie Ihre modulare Konfigurationsobjekte hosten kann in JavaScript anstelle von JSON-Dateien Dateien (das ist, was ich tun). Dies gibt mir die Möglichkeit, meine Konfigurationsobjekte bei Bedarf dynamisch zu kompilieren. Wenn das etwas ist, was Sie interessiert, kann ich diesen Code auch teilen.