2015-02-03 22 views
6

Tôi có tôi gulpfile.js với một số nhiệm vụ và tôi muốn thực hiện một nhiệm vụ khi tôi làm cordova buildGulp móc trước khi 'cordova build xxx'

Tôi tạo ra một thư mục before_build bên trong thư mục hooks với một đơn giản console.log("a") trong một js tập tin.

Nhưng tôi chạy ví dụ cordova build android nó nói 'console' is undefined, tôi phải làm gì đó khác để chạy Javascript? Tôi không thể tìm thêm thông tin.

Cảm ơn!

EDIT:

tôi thêm #!/usr/bin/env node ở phía trên cùng của tập tin .js của tôi và console.log công trình nhưng bây giờ tôi muốn làm gulp myTask và ném cho tôi gulp is not defined

Trả lời

8

Bạn có thể chạy nó mà không để lại Node bằng cách dán mã này vào file 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

Liệu gulp.start() có hoàn thành đồng bộ như yêu cầu của Cordova không? –

+0

Tôi thấy rằng gulp.start() không còn được dùng nữa và được lên kế hoạch xóa: https://github.com/gulpjs/gulp/issues/505 .. Mặc dù đó là một năm trước! –

+0

Mới nhất Cordova không còn đề xuất sử dụng thư mục móc nữa, nó sẽ không còn được dùng nữa. Vui lòng sử dụng phương pháp JS thay vì theo đề nghị của @David Douglas – wajatimur

3

Cuối cùng tôi có thể chạy lệnh, đây được .js tôi nộp bên 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

không phải là giải pháp tốt nhất kể từ khi bạn đang tạo ra một quy trình mới từ nút để chạy một kịch bản nút (ngụm). – AlexStack

+0

@ AlexStack vì vậy, bạn nghĩ đó là giải pháp tốt hơn? –

+0

Tôi thích giải pháp có nhiều phiếu nhất. – AlexStack

4

Tôi thấy mình phải sử dụng __dirname để yêu cầu tệp '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; 
} 

NB: 'gulpfile.js' và 'hook.js' nằm trong cùng một thư mục ở đây. Bạn có thể thiết lập đường dẫn tùy chỉnh để treo file js trong config.xml tập tin Cordova của:

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

Cũng hãy cẩn thận rằng Cordova hook script hoạt động từ thư mục gốc của dự án để bạn có thể gặp sự cố đường dẫn tệp nếu gulpfile.js của bạn hoạt động từ bên trong thư mục con. –

Các vấn đề liên quan