2015-12-31 11 views
5

Ecco un esempio di quello che sto cercando:È possibile passare una variabile Grunt a una funzione JavaScript all'interno di un'attività Grunt?

module.exports = function(grunt) { 
    grunt.initConfig({ 

    config: grunt.file.readYAML('_config.yml'), 
    // example variable: <%= config.scripts %> 

    copy: { 
     scripts: (function() { 
     if (config.scripts === true) { // I want to target <%= config.scripts %> 
      return { 
      expand: true, 
      cwd: '<%= input %>/_assets/js/', 
      src: '**/*.js', 
      dest: '<%= output %>/assets/js/' 
      }; 
     } else { 
      return { 
      // do nothing 
      }; 
     } 
     })() 
    } 

    }); 
}; 

So Grunt in grado di leggere i dati da un file usando 'grunt.file.readJSON', e poi che i dati disponibili con il seguente tipo di variabile, '<% = pkg.value%>'.

Quello che voglio fare è creare un'attività con le opzioni if ​​/ else basate sulle variabili all'interno del file JSON. Quello su cui non sono chiaro è come passare una variabile Grunt '<% = pkg.value%>' nell'istruzione JavaScript se in modo comprensibile. Ho provato a passarlo nello stesso formato di Grunt con '<% =%>', oltre a rimuovere quella parte e passare 'pkg.value', ma nessuno dei due sembra funzionare.

Se qualcuno può far luce sul fatto se questo può essere fatto o meno, lo apprezzerei molto. Grazie!

+1

Potresti fornire un esempio concreto del tuo compito per favore? (sostituisci i commenti "fai qualcosa" con il tuo compito) –

+0

Vedere l'esempio sopra riportato. –

+0

Grazie. Pubblico una risposta Provalo. –

risposta

1

Quando ho più tempo, io probabilmente esaminare alcune idee, ma sulla base delle idee offerti qui, questo è quello che ho finito per andare con per ora.

module.exports = function(grunt) { 

    var config = grunt.file.readYAML('_config.yml'); 

    grunt.initConfig({ 

    copy: { 
     scripts: (function() { 
     if (config.scripts) { 
      return { 
      expand: true, 
      cwd: 'input/_assets/js/', 
      src: '**/*.js', 
      dest: 'output/assets/js/' 
      }; 
     } else { 
      return { 
      // do nothing 
      }; 
     } 
     })() 
    } 

    }); 
}; 

Grazie a tutti per il vostro aiuto!

0

Grunt ha un'API per leggere i file, che si può usare qualcosa di simile:

test.json

{ 
    "fruit": "apple" 
} 

Gruntfile.js

module.exports = function(grunt) { 

    grunt.initConfig({ 
    ... 
    }) 

    grunt.registerTask('sample-task', function() { 
    var test = grunt.file.readJSON('./test.json'); 

    if (test.fruit === 'apple') { 
     // do this one thing 
    } else { 
     // do something else 
    } 

    }); 

    grunt.registerTask('default', ['sample-task']); 
}; 
+0

Puoi condividere come potrei usare questo per dire, se una variabile nel file "test.json" è impostata su true, eseguire taskA, o se è false, eseguire taskB? Ho anche aggiornato il mio esempio nella domanda originale per riferimento. Grazie! –

+0

ci sei! Ottieni un oggetto JSON, quindi puoi trattarlo come un normale oggetto JS – alexdmejias

1

Invece di assegnare direttamente il grugnito config nell'attributo config, memorizzarlo in una variabile (gruntConfig). Ora sarai in grado di accedervi nel seguente codice.

module.exports = function(grunt) { 
    // store your grunt config 
    var gruntConfig = grunt.file.readYAML('_config.yml'); 
    // init `script` with an empty object 
    var script = {}; 
    if (gruntConfig.script) { 
     script = { 
      expand: true, 
      cwd: '<%= input %>/_assets/js/', 
      src: '**/*.js', 
      dest: '<%= output %>/assets/js/' 
     }; 
    } 
    // Init Grunt configuration 
    grunt.initConfig({ 
     config: gruntConfig, 
     copy: { 
      scripts: script 
     } 
    }); 
};