2013-03-04 31 views
6

Hem hem de ile başlıyorum.Grunt/requirejs build sırasında hata ayıklama bayrağı ayarlama/atama

var debugEnabled = true; 

bu false ayarlanabilir bir yolu bir grunt yapı içinden yürütülüyor requirejs optimizasyon içinden otomatik var mı: Ben böyle uygulamasında bir hata ayıklama bayrağı var?

DÜZENLEME: Ben requirejs optimize edici çalışır yalnızca bir varsayılan görev var, netleştirmek için. debugEnabled değişkeni, main'a bağımlı olan AppLogger, uygulamasındaki modüller arasındadır. AppLogger ait küçültülmüş versiyonu console.log vb

cevap

6

yapıyor durdurmak Diyelim ki iki görevi var diyelim böylece

requirejs inşa false için bu değişkeni ayarlayabilirsiniz bir yolu var mı:

  • gelişme
  • üretim

development tüm şeyler yo yapar u jshint, CoffeeScript derleme gibi gelişiminde ihtiyaç ... production Eğer hata ayıklama bayrağı denetler build görevi kayıt olabilir

Sonra

requirejs optimizasyonu, css minification ... yapar:

grunt.registerTask('build', 'run build', function() { 
     var task = debugEnabled ? 'development' : 'production'; 

     // run the targetted task 
     grunt.task.run(task); 
    }); 

Komut satırında, grunt build bunu çalıştıracaktır.

Alternatif olarak, hırıltı içinde option parametresini kullanabilirsiniz:

komut üzerine
grunt.registerTask('build', 'run build', function() { 
     // start development build by default 
     var target = grunt.option('target') || 'development'; 

     // run the targetted task 
     grunt.task.run(target); 
    }); 

, grunt build --target=production bunu çalıştırır.

Düzenleme:

Misunderstood soru biraz. Gördüğüm tek yolu ayrı bir modül içinde ayıklama bayrağı ayırmaktır:

yoluna/için/

define(function() { 
    return true; 
}); 

Sonra (sizin hırıltı görevleri yakınında) bir üretim modeli oluşturmak debug.js:

yol/to/grunt/tasks/debug.js

define(function() { 
    return false; 
}); 

Ve requirejs görev, bu sürümün belirtin:

requirejs: { 
    options: { 
     paths: { 
     debug: 'path/to/grunt/tasks/debug.js' 
     } 
    } 
} 
+0

Cevabınız için teşekkür ederiz. Aradığım şey biraz farklı ve soruya bir güncelleme ile açıklığa kavuşturmaya çalıştım. –

+0

Cevabımı düzenledim. Bu yardımcı olur mu bakın. – asgoth

+0

Bu kesinlikle çalışır, ancak [r.js örnek oluşturma dosyasından] pragmalar oluşturmanın başka bir yolunu bulmuştur (https://github.com/jrburke/r.js/blob/master/build/example.build Js). Bu görünüşe göre 'jquery.mobile' [ayrıca kullanır] (https://github.com/jquery/jquery-mobile/blob/master/js/jquery.mobile.events.js). Cevabınızı kabul ettim, ama benim için başka bir şeyle kendi başıma bir tane daha ekleyeceğim. Teşekkür ederim! –

15

@asgoth 'ın answer kesinlikle çalışacak, ama yapmak için başka seçenekler çift anladım '' enjekte (veya yapı işlemi sırasında kodu kaldırmak yerine).

example build.js file belgesinde belirtildiği gibi, yapı işlemi sırasında kod parçacıklarını dahil etmek/hariç tutmak için pragmas yapısını kullanabiliriz.

//Specify build pragmas. If the source files contain comments like so: 
//>>excludeStart("fooExclude", pragmas.fooExclude); 
//>>excludeEnd("fooExclude"); 
//Then the comments that start with //>> are the build pragmas. 
//excludeStart/excludeEnd and includeStart/includeEnd work, and the 
//the pragmas value to the includeStart or excludeStart lines 
//is evaluated to see if the code between the Start and End pragma 
//lines should be included or excluded. If you have a choice to use 
//"has" code or pragmas, use "has" code instead. Pragmas are harder 
//to read, but they can be a bit more flexible on code removal vs. 
//has-based code, which must follow JavaScript language rules. 
//Pragmas also remove code in non-minified source, where has branch 
//trimming is only done if the code is minified via UglifyJS or 
//Closure Compiler. 
pragmas: { 
    fooExclude: true 
}, 

//Same as "pragmas", but only applied once during the file save phase 
//of an optimization. "pragmas" are applied both during the dependency 
//mapping and file saving phases on an optimization. Some pragmas 
//should not be processed during the dependency mapping phase of an 
//operation, such as the pragma in the CoffeeScript loader plugin, 
//which wants the CoffeeScript compiler during the dependency mapping 
//phase, but once files are saved as plain JavaScript, the CoffeeScript 
//compiler is no longer needed. In that case, pragmasOnSave would be used 
//to exclude the compiler code during the save phase. 
pragmasOnSave: { 
    //Just an example 
    excludeCoffeeScript: true 
}, 

Herhalde dan AMD ve requirejs öğrenme için iyi bir yerdir jquery.mobilecode eylem, bu görebiliyordu. İşte

benim için çalıştı budur:

AppLogger.js: my Gruntfile yılında requirejs için bu yapılandırma ile

requirejs:{ 
    compile:{ 
    options:{ 
     baseUrl:"js/", 
     mainConfigFile:"js/main.js", 
     name:'main', 
     out:'js/main.min.js', 
     pragmas:{ appBuildExclude:true } 
    } 
    } 
} 

:

/* global console: false */ 
define(function() { 

    var debugEnabled = false; 
//>>excludeStart('appBuildExclude', pragmas.appBuildExclude); 
    debugEnabled = true; 
//>>excludeEnd('appBuildExclude'); 
    return { 
    log:function (message) { 
     if (debugEnabled && console) { 
     console.log('APP DEBUG: ' + message); 
     } 
    } 
    }; 

}); 

Gruntfile.js ,pragmasındaki bölümve excludeEnd derlenmiş/oluşturulmuş dosyadan çıkarıldı.

Hâlâ requirejs'u öğreniyorum, bu yüzden bu tür bir şey için en iyi uygulama olduğunu iddia etmiyorum, ama bu kesinlikle benim için işe yaradı.

+2

daha iyi olacak (optimizasyon bakış açısından) herhangi bir kayıt mesajını, bu tür yorumlarda değil, bayrakta sarmak olacak mı? – shabunc

İlgili konular