Grunt'a Başlıyalım!
Grunt ve Grunt eklentileri, npm üzerinden, Node.js paket yöneticisiyle kurulmakta ve yönetilmektedir. Grunt 0.4.x, kararlı Node.js sürümleri >= 0.8.0
gerektirir.
Grunt'ı kurmadan önce, npm 'nin güncel olduğundan emin olun; bunun için npm update -g npm
komutunu çalıştırın (bu bazı sistemlerde sudo
gerektirebilir).
Eğer Grunt'ı zaten kurduysanız ve hızlı bir referans arıyorsanız, lütfen Gruntfile
örneğimize ve bir görevin nasıl yapılandırılacağına göz atın.
CLI'yi Kurma
Grunt 0.3 Kullanıyor musunuz? Lütfen Grunt 0.3 Notları
'na bakın.
Başlamak için, Grunt'ın komut satırı arayüzünü (CLI) global olarak kurmak isteyeceksiniz. Bunu yapmak için sudo
kullanmanız (OSX, *nix, BSD vb. için) veya komut satırınızı Yönetici olarak çalıştırmanız (Windows için) gerekebilir.
npm install -g grunt-cli
Bu, grunt
komutunu sistem yolunuza ekleyecek ve herhangi bir dizinden çalıştırılmasına olanak tanıyacaktır.
Not:
grunt-cli
'yi kurmanın, Grunt görev koşucusunu kurmadığını unutmayın! Grunt CLI'nin görevi basittir: yanındaki birGruntfile
ile kurulu olan Grunt sürümünü çalıştırmaktır. Bu, aynı makinede birden fazla Grunt sürümünün aynı anda kurulu olmasına olanak tanır.
CLI'nin Çalışma Şekli
Her grunt
çalıştırıldığında, yerel olarak kurulmuş bir Grunt'ı node'un require()
sistemi ile arar. Bu nedenle, projenizdeki herhangi bir alt klasörden grunt
çalıştırabilirsiniz.
Yerel olarak kurulu bir Grunt bulunduğunda, CLI yerel Grunt kütüphanesini yükler, Gruntfile
'ınızdan yapılandırmayı uygular ve çalıştırmasını istediğiniz görevleri yerine getirir. Gerçekten ne olduğunu anlamak için kodu okuyun.
Mevcut Bir Grunt Projesi ile Çalışmak
Grunt CLI'nin kurulu olduğunu ve projenizin zaten bir package.json
ve Gruntfile
ile yapılandırılmış olduğunu varsayarsak, Grunt ile çalışmaya başlamak oldukça kolaydır:
- Projenizin kök dizinine geçin.
- Proje bağımlılıklarını
npm install
komutuyla kurun. - Grunt'ı
grunt
komutuyla çalıştırın.
Tip: Gerçekten de bu kadar basit. Kurulu Grunt görevlerini
grunt --help
komutunu çalıştırarak listeleyebilirsiniz, ancak genellikle projenizin belgeleriyle başlamak iyi bir fikirdir.
Yeni Bir Grunt Projesi Hazırlama
Tipik bir kurulum, projenize iki dosya eklemeyi içerir: package.json
ve Gruntfile
.
package.json
package.json: Bu dosya, npm tarafından yayımlanan projelerin metadata'sını saklamak için kullanılır. Bu dosyada projenizin ihtiyaç duyduğu grunt ve Grunt eklentilerini devDependencies olarak listeleyeceksiniz.
Gruntfile: Bu dosya Gruntfile.js
veya Gruntfile.coffee
olarak adlandırılır ve görevleri yapılandırmak veya tanımlamak ve Grunt eklentilerini yüklemek için kullanılır. Bu belgelerde bir Gruntfile
bahsedildiğinde, ya bir Gruntfile.js
ya da Gruntfile.coffee
dosyasından bahsedilmektedir.
package.json
package.json
dosyası, projenizin kök dizininde, Gruntfile
ile yan yana yer almalı ve proje kaynaklarınızla birlikte sürüm kontrol sistemine eklenmelidir. package.json
dosyasının bulunduğu aynı klasörde npm install
komutunu çalıştırmak, listedeki her bağımlılığın doğru sürümünü kuracaktır.
Projeniz için bir package.json
dosyası oluşturmanın birkaç yolu vardır:
- Çoğu grunt-init şablonları otomatik olarak proje spesifik bir
package.json
dosyası oluşturacaktır. - npm init komutu temel bir
package.json
dosyası oluşturur. - Aşağıdaki örnekle başlayarak, gerektiği gibi genişletebilirsiniz, bu şartnameyi takip ederek.
{
"name": "my-project-name",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.5",
"grunt-contrib-jshint": "~0.10.0",
"grunt-contrib-nodeunit": "~0.4.1",
"grunt-contrib-uglify": "~0.5.0"
}
}
Grunt'ı ve Grunt Eklentilerini Kurma
Mevcut bir package.json
dosyasına Grunt ve Grunt eklentilerini eklemenin en kolay yolu npm install --save-dev
komutudur. Bu sadece ``'ü yerel olarak kurmakla kalmaz, aynı zamanda bunu otomatik olarak devDependencies bölümüne ekler ve [tilde sürüm aralığını] kullanır.
npm install grunt --save-dev
Aynı şey Grunt eklentileri ve diğer node modülleri için de yapılabilir. Aşağıdaki örnekte JSHint görev modülü kurulumunu görüyorsunuz:
npm install grunt-contrib-jshint --save-dev
Projenizde kurulu ve kullanılabilir mevcut Grunt eklentilerine plugins sayfasından göz atın.
İşiniz bittiğinde, güncellenmiş package.json
dosyasını projenizle birlikte sürüm kontrol sistemine eklemeyi unutmayın!
Gruntfile
Gruntfile.js
veya Gruntfile.coffee
dosyası, projenizin kök dizininde package.json
dosyasıyla yan yana bulunan geçerli bir JavaScript veya CoffeeScript dosyasıdır ve proje kaynaklarınızla birlikte sürüm kontrol sistemine eklenmelidir.
Bir Gruntfile
aşağıdaki parçalardan oluşur:
- "wrapper" fonksiyonu
- Proje ve görev yapılandırması
- Grunt eklentilerini ve görevlerini yükleme
- Özel görevler
Bir Örnek Gruntfile
Aşağıdaki Gruntfile
da, proje metadata'sı projenin package.json
dosyasından Grunt yapılandırmasına aktarılır ve grunt-contrib-uglify eklentisinin uglify
görevi, bir kaynak dosyasını küçültmek ve bu metadata kullanarak dinamik bir banner yorumu oluşturmak için yapılandırılır. grunt
komutu komut satırında çalıştırıldığında, varsayılan olarak uglify
görevi çalıştırılacaktır.
module.exports = function(grunt) {
// Proje yapılandırması.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/<%= pkg.name %>.js',
dest: 'build/<%= pkg.name %>.min.js'
}
}
});
// "uglify" görevini sağlayan eklentiyi yükleyin.
grunt.loadNpmTasks('grunt-contrib-uglify');
// Varsayılan görev(ler).
grunt.registerTask('default', ['uglify']);
};
Artık tüm Gruntfile
'ı gördüğünüze göre, bileşen parçalarına göz atalım.
"Wrapper" Fonksiyonu
Her Gruntfile
(ve Grunt eklentisi) bu temel formatı kullanır ve tüm Grunt kodunuz bu fonksiyonun içinde belirtilmelidir:
module.exports = function(grunt) {
// Burada grunt ile ilgili işlemler yapın
};
Proje ve Görev Yapılandırması
Çoğu Grunt görevi, [[grunt.initConfig|grunt#grunt.initconfig]] yöntemine geçirilen bir nesnede tanımlanan yapılandırma verilerine bağlıdır.
Bu örnekte, grunt.file.readJSON('package.json')
ifadesi package.json
'da saklanan JSON metadata'sını Grunt yapılandırmasına aktarmaktadır. `` şablon dizgeleri, yapılandırma özelliklerine atıfta bulunabileceğinden, dosya yolları ve dosya listeleri gibi yapılandırma verileri, tekrarlamayı azaltmak için bu şekilde belirtilebilir.
Yapılandırma nesnesinin içinde herhangi bir rastgele veri saklayabilirsiniz ve bu, görevlerinizin gerektirdiği özelliklerle çakışmadığı sürece göz ardı edilecektir. Ayrıca, bu JavaScript olduğundan, JSON ile sınırlı kalmazsınız; bu alanda geçerli herhangi bir JS kullanabilirsiniz. Gerekirse, yapılandırmayı programlı olarak da oluşturabilirsiniz.
Çoğu görevin aksine, grunt-contrib-uglify eklentisinin uglify
görevi, yapılandırmasının aynı adla belirtilmesini bekler. Burada, banner
seçeneği, tek bir kaynak dosyasını tek bir varış dosyasına küçülten bir build
adında tek bir uglify hedefi ile birlikte belirtilir.
// Proje yapılandırması.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/<%= pkg.name %>.js',
dest: 'build/<%= pkg.name %>.min.js'
}
}
});
Grunt Eklentilerini ve Görevlerini Yükleme
Concatenation, minification ve linting gibi yaygın olarak kullanılan birçok görev, grunt eklentileri olarak mevcuttur. Bir eklenti package.json
içinde bir bağımlılık olarak belirtildiği ve npm install
ile kurulduğu sürece, Gruntfile
'ınızda basit bir komutla etkinleştirilebilir:
// "uglify" görevini sağlayan eklentiyi yükleyin.
grunt.loadNpmTasks('grunt-contrib-uglify');
Not: grunt --help
komutu mevcut tüm görevleri listeleyecektir.
Özel Görevler
Grunt'ı bir veya daha fazla görevi varsayılan olarak çalıştıracak şekilde yapılandırabilirsiniz; bunun için bir default
görevi tanımlamanız gerekir. Aşağıdaki örnekte, komut satırında grunt
çalıştırmak, uglify
görevini çalıştıracaktır. Bu, grunt uglify
veya hatta grunt default
çalıştırmakla işlevsel olarak aynıdır. Dizi içinde herhangi bir sayıda görev (argümanlarla veya argümansız) belirtilmesi mümkündür.
// Varsayılan görev(ler).
grunt.registerTask('default', ['uglify']);
Projeniz, bir Grunt eklentisi tarafından sağlanmayan görevler gerektiriyorsa, özel görevleri doğrudan Gruntfile
içinde tanımlayabilirsiniz. Örneğin, bu Gruntfile
, yapılandırma bileşeni bile kullanmayan tamamen özel bir default
görevini tanımlar:
module.exports = function(grunt) {
// Çok temel bir varsayılan görev.
grunt.registerTask('default', 'Bazı şeyleri kaydet.', function() {
grunt.log.write('Bazı şeyleri kaydediyor...').ok();
});
};
Proje spesifik özel görevler Gruntfile
'de tanımlanmak zorunda değildir; bunlar harici .js
dosyalarında tanımlanabilir ve [[grunt.loadTasks|grunt#grunt.loadtasks]] yöntemiyle yüklenebilir.
Daha Fazla Okuma
- [[Installing grunt]] kılavuzu, belirli, üretim veya geliştirme sürümlerinin Grunt ve grunt-cli'yi kurmaya dair ayrıntılı bilgiler içermektedir.
- [[Configuring Tasks]] kılavuzu,
Gruntfile
içinde görevlerin, hedeflerin, seçeneklerin ve dosyaların nasıl yapılandırılacağına dair derin bir açıklama ile şablonlar, globlama desenleri ve dış verilerin aktarımı hakkında bilgi vermektedir. - [[Creating Tasks]] kılavuzu, Grunt görevlerinin türleri arasındaki farkları listelemekte ve birçok örnek görev ve yapılandırmayı göstermektedir.
- Özel görevler veya Grunt eklentileri yazma hakkında daha fazla bilgi için [[developer documentation|grunt]] sayfasına göz atın.