2015-02-03 13 views
6

Mam gulpfile.js z niektórych zadań i chcę wykonać jedno zadanie, gdy robię cordova buildhak Gulp przed „Cordova build xxx”

stworzyłem before_build folderu wewnątrz folderu hooks z prostym console.log("a") w js plik.

Ale jeśli uruchomię na przykład cordova build android, to znaczy, że muszę zrobić coś innego, aby uruchomić Javascript? Nie mogłem znaleźć więcej informacji.

Dzięki!

EDIT:

dodałem #!/usr/bin/env node w górnej części mojego pliku .js i console.log prac, ale teraz chcę zrobić gulp myTask i rzuca mi gulp is not defined

Odpowiedz

8

można go uruchomić bez wychodzenia Node wklejając ten kod do pliku before_build/010_compile_css.js:

#!/usr/bin/env node 

var gulp = require('gulp'); 
var path = require('path'); 

var rootdir = process.argv[2]; 
var gulpfile = path.join(rootdir, 'gulpfile.js'); 

process.stdout.write('Compiling SCSS'); 

require(gulpfile); 

//interaction 
gulp.start('scss'); 
+0

Czy gulp.start() będzie kompletny synchronicznie, jak wymagają haki Cordova? –

+0

Znalazłem, że gulp.start() jest przestarzałe i ma zostać usunięte: https://github.com/gulpjs/gulp/issues/505 .. Chociaż to było rok temu! –

+0

Najnowsza Cordova już nie zaleca używania folderu hooków, wkrótce zostanie usunięta. Zamiast tego użyj metody JS, zgodnie z sugestią @David Douglas. – wajatimur

3

Wreszcie mogłem uruchomić polecenie, tutaj jest złożyć moje js wewnątrz hooks/before_build

#!/usr/bin/env node 
var sys = require('sys') 
var exec = require('child_process').exec; 
function puts(error, stdout, stderr) { sys.puts(stdout) } 
exec("gulp", puts); 
+0

najlepszym rozwiązaniem, ponieważ podczas tworzenia nowego procesu od węzła do węzła uruchomić inny skrypt (łyk). – AlexStack

+0

@AlexStack, więc jak myślisz, jakie jest lepsze rozwiązanie? –

+0

Podoba mi się rozwiązanie, które zdobyło najwięcej głosów. – AlexStack

4

Znalazłem, że muszę użyć __dirname, aby wymagać pliku "gulpfile.js".

#!/usr/bin/env node 

module.exports = function(context) { 
    var Q = context.requireCordovaModule('q'); 
    var deferral = new Q.defer(); 

    var path = require('path'), 
     gulp = require('gulp'), 
     gulpfile = path.join(__dirname, 'gulpfile'); 
    require(gulpfile); 

    gulp.start('myTask').once('task_stop', function(){ 
     console.log('myTask done'); 
     deferral.resolve(); 
    }); 

    return deferral.promise; 
} 

Uwaga: "gulpfile.js" i "hook.js" znajdują się w tym samym katalogu tutaj. Można ustawić niestandardową ścieżkę do pliku js hak w config.xml pliku Cordova:

<hook type="before_build" src="app/hook.js" /> 
nie
+0

Pamiętaj też, że skrypty przechwytujące Cordova działają z głównego katalogu projektu, więc możesz natrafić na problemy z plikami ścieżek, jeśli plik gulpfile.js działa z podkatalogu. –