Menggabungkan Lab Pola dengan Gulp untuk Peningkatan Alur Kerja
() translation by (you can also view the original English article)
Apakah Anda dan tim Anda bekerja dengan panduan gaya? Apakah Anda memiliki dokumentasi untuk modul Anda? Jika tidak, jangan panik Dalam tutorial ini saya akan menunjukkan kepada Anda bagaimana meningkatkan cara Anda bekerja dengan tim Anda. Kami akan mengeksplorasi konsep yang disarankan oleh Brad Frost dan Dave Olsen, menggunakan Pattern Lab untuk membuat panduan gaya, dengan Gulp untuk menangani aset. Mari kita mulai!
Apa itu Gulp?
Gulp.js adalah sistem membangun streaming dan task runner. Konsep pentingnya adalah Anda memiliki aliran tempat Anda menentukan banyak hal untuk file Anda. Lebih cepat daripada mengelola sesuatu secara manual, menghemat tenaga Anda dan menghemat waktu. Misalnya, dalam tutorial ini kami akan memasukkan semua file Sass kami ke dalam pipe (proses):
- kompilasi Sass ke CSS,
- menggabungkan CSS file,
- memperkecil output,
- dan memindahkan semuanya ke lokasi lain
Untuk mempelajari lebih lanjut tentang dasar-dasar Gulp, lihat panduan pemula Kezz Bracey The Command Line for Web Design: Automation with Gulp.
Apa yang dimaksud dengan Pattern Lab?
Pattern Lab adalah konsep untuk menciptakan sistem desain atomic; membangun modul bukannya membangun halaman secara langsung. Ini mendefinisikan beberapa komposit bagian:
- atom
- molekul
- organisme
- template
- Halaman
Anda mulai dengan elemen terkecil, membangun ke bagian yang lebih besar, sampai Anda memiliki halaman penuh. Pendekatan ini membantu Anda menghemat waktu, berkolaborasi, dan menjamin struktur yang solid.
Atom
Atom tidak dapat dipecah menjadi potongan-potongan kecil.



Ini adalah blok yang paling sederhana, termasuk tag fundamental seperti daftar, warna, font, animasi, dll.
Molekul
Molekul adalah kelompok unsur yang berbeda (atom) yang berfungsi bersama seperti satu unit.



Misalnya, promosi dengan judul, gambar, paragraf, dan tautan seperti "Baca selengkapnya". Masing-masing adalah elemen tunggal, tetapi bersama-sama mereka menjadi sebuah molekul; bagian dari sistem yang lebih besar dan lebih kompleks.
Organisme
Organisme adalah kelompok elemen (atom dan molekul) dan bekerja seperti sebuah bagian di situs web Anda.



Pikirkan, misalnya, dari sebuah header situs web. Ini adalah sistem yang lebih besar, dibangun dari molekul seperti bentuk pencarian dan navigasi, yang keduanya pada gilirannya dibangun dari atom yang lebih kecil.



Lihat demo UI online dan rasakan seluruh sistem.
Biarkan Sihir Terjadi!
Sekarang saatnya menggabungkan kedua sistem ini dan membuat alur kerja untuk tim Anda. Pola Lab akan memberi kita HTML dan mengantarkan UI sederhana, Gulp akan menangani semua aset yang kita butuhkan.
Fitur utama kita:
- Sass-kompilasi (Libsass)
- Server (Browser-Sync)
- Livereload
- Mengecilkan (Javascript, CSS, dan gambar)
- Melepaskan / penyebaran
- Bump up versi
- Penandaan
- Mendorong file dan tag untuk endpoint
- Dorong file melalui rsync ke server
Pengenalan
Untuk menggunakan Gulp Anda harus terlebih dahulu memiliki node.js di sistem Anda. Jika tidak, lihat Kezz Bracey, The Command Line for Web Design: Mengikat Paket Pihak ke-3 untuk instruksi penyiapan.
Mari kita mulai dengan menginstal Gulp.js secara global. Di terminal, ketik:
1 |
npm install gulp -g |
Sekarang kita perlu mengkloning repositori Patternlab untuk memberi kita dasar untuk bekerja.
1 |
git clone git@github.com:pattern-lab/patternlab-php.git |
Selanjutnya kita perlu gulp file setup tugas kita. Buat gulpfile.js
di root folder proyek Anda. Setelah itu kita memerlukan file konfigurasi, di mana kita mendefinisikan semua jalur, jadi buatlah build.config.json
di folder Anda.
File-file berikut diperlukan juga:
.bowerrc
package.json
bower.json
Setelah semua langkah dasar ini, kami memiliki struktur proyek dasar. Sekarang mari kita mulai untuk membangun tugas alur kerja kita.
Mulailah dengan Gulpfile
Di bagian atas file gulpfile.js, kita memerlukan setiap dependensi. Jika Anda menginstal sebuah plugin, Anda harus "membutuhkan" dan memberinya sebuah nama.
Mulailah dengan gulp dan configfile kita untuk semua jalur dan konfigurasi.
1 |
var gulp = require('gulp'), |
2 |
config = require('./build.config.json'); |
Selama proses pengembangan kami, kita tidak perlu mengecilkan kode (itu buang-buang waktu kecuali kita siap untuk menerapkan). Dengan variabel production
berikut, kita dapat mengaktifkan dan menonaktifkan beberapa tugas. Anda akan melihat ini dalam tindakan nanti.
1 |
// Production Handling
|
2 |
// Description: Use 'production' variable with 'gulpif'
|
3 |
// Toggle minifing and optimization for assets
|
4 |
var production; |
Dengan pengaturan hal-hal, kita sekarang dapat mulai menambahkan berbagai tugas untuk membantu kita dalam pengembangan!
Tugas 1: Membersihkan semua aset
1 |
// Install needed dependency
|
2 |
npm install gulp-clean |
3 |
|
4 |
// Require dependency
|
5 |
var clean = require('gulp-clean'); |
Jika Anda menghapus gambar dari folder “sumber /”, Anda akan menemukan ada salinan gambar di “publik /” juga. Karena duplikasi ini, kita akan melakukan langkah sederhana untuk membersihkan folder gambar di "publik /".
1 |
// Task: Clean:before
|
2 |
// Description: Removing assets files before running other tasks
|
3 |
gulp.task('clean:before', function () { |
4 |
return gulp.src( |
5 |
config.assets.dest |
6 |
)
|
7 |
.pipe(clean({ |
8 |
force: true |
9 |
}))
|
10 |
});
|
Tugas 2: Menangani Skrip
1 |
// Install needed dependencies
|
2 |
npm install gulp-concat gulp-uglify gulp-rename |
3 |
|
4 |
// Require dependencies
|
5 |
var concat = require('gulp-concat'); |
6 |
var uglify = require('gulp-uglify'); |
7 |
var rename = require('gulp-rename'); |
Untuk tujuan penerapan, penting untuk hanya memiliki satu file dengan semua skrip. Untuk mencapai hal ini, kita akan menggunakan plugin tegukan-concat dan menggabungkan semua skrip kami untuk menghasilkan application.js. Jika produksi
variabel benar, maka application.js
akan menjadi uglified dan mendapatkan nama baru: application.min.js
.
1 |
gulp.task('scripts', function () { |
2 |
return gulp.src(config.scripts.files) |
3 |
.pipe(concat( |
4 |
'application.js' |
5 |
))
|
6 |
.pipe(gulpif(production, uglify())) |
7 |
.pipe(gulpif(production, rename({ |
8 |
suffix: '.min' |
9 |
})))
|
10 |
.pipe(gulp.dest( |
11 |
config.scripts.dest |
12 |
))
|
13 |
.pipe(browserSync.reload({stream:true})); |
14 |
});
|
Tugas 3: Font
Tugas ini akan mendorong semua font ke folder publik. Tidak ada yang lain.
1 |
// Task: Handle fonts
|
2 |
gulp.task('fonts', function () { |
3 |
return gulp.src(config.fonts.files) |
4 |
.pipe(gulp.dest( |
5 |
config.fonts.dest |
6 |
))
|
7 |
.pipe(browserSync.reload({stream:true})); |
8 |
});
|
Tugas 4: Gambar
Untuk langkah ini, kami akan memasang dan memerlukan plugin gulp-imagemin. Setelah selesai, kita dapat menggunakannya untuk memperkecil gambar. Ini akan menghemat memori dan meningkatkan kinerja.
1 |
// Install imagemin
|
2 |
npm install gulp-imagemin |
3 |
|
4 |
// Require dependencies
|
5 |
var imagemin = require('gulp-imagemin'); |
Jika produksi
variabel benar, maka semua gambar akan diperkecil. Setelah selesai, kita mendorong mereka ke folder tujuan.
1 |
// Task: Handle images
|
2 |
gulp.task('images', function () { |
3 |
return gulp.src(config.images.files) |
4 |
.pipe(gulpif(production, imagemin())) |
5 |
.pipe(gulp.dest( |
6 |
config.images.dest |
7 |
))
|
8 |
.pipe(browserSync.reload({stream:true})); |
9 |
});
|
Tugas 5: Menangani Sass
Mari instal dan minta dependensi gulp-sass dan gulp-cssmin.
1 |
// Install needed dependencies
|
2 |
npm install gulp-sass gulp-cssmin |
3 |
|
4 |
// Require dependencies
|
5 |
var sass = require('gulp-sass'); |
6 |
var cssmin = require('gulp-cssmin'); |
Sekarang kita akan mengambil semua file Sass, gunakan plugin Sass untuk mengkompilasinya ke CSS, kemudian jika produksi
variabelnya benar, cssmin akan melakukan hal tersebut.
1 |
// Task: Handle Sass and CSS
|
2 |
gulp.task('sass', function () { |
3 |
return gulp.src(config.scss.files) |
4 |
.pipe(sass()) |
5 |
.pipe(gulpif(production, cssmin())) |
6 |
.pipe(gulpif(production, rename({ |
7 |
suffix: '.min' |
8 |
})))
|
9 |
.pipe(gulp.dest( |
10 |
config.scss.dest |
11 |
))
|
12 |
.pipe(browserSync.reload({stream:true})); |
13 |
});
|
Tugas 6: Server Lab Pola
Lab Pola memiliki server sendiri, yang dapat Anda mulai dengan perintah shell sederhana. Untuk menjalankan perintah ini kita memerlukan plugin gulp-shell.
1 |
// Install needed dependencies
|
2 |
npm install gulp-shell |
3 |
|
4 |
// Require dependencies
|
5 |
var shell = require('gulp-shell'); |
Pada titik ini, kita akan menyalin folder panduan gaya dari inti ke publik. Pada titik ini, Anda akan dapat melihat front-end yang kuat di browser.
1 |
// Task: patternlab
|
2 |
// Description: Build static Pattern Lab files via PHP script
|
3 |
gulp.task('patternlab', function () { |
4 |
return gulp.src('', {read: false}) |
5 |
.pipe(shell([ |
6 |
'php core/builder.php -gpn' |
7 |
]))
|
8 |
.pipe(browserSync.reload({stream:true})); |
9 |
});
|
10 |
|
11 |
// Task: styleguide
|
12 |
// Description: Copy Styleguide-Folder from core/ to public
|
13 |
gulp.task('styleguide', function() { |
14 |
return gulp.src(config.patternlab.styleguide.files) |
15 |
.pipe(gulp.dest(config.patternlab.styleguide.dest)); |
16 |
});
|
Tugas 7: Mulai Server dan Perhatikan File
Lab Pola memiliki server internal, tetapi Browser-Sync menangani injeksi perubahan CSS tanpa memuat ulang halaman.
1 |
// Install needed dependencies
|
2 |
npm install browser-sync gulp-watch |
3 |
|
4 |
// Require dependencies
|
5 |
var browser-sync = require('browser-sync'); |
6 |
var watch = require('gulp-watch'); |
Pengamat menangani perubahan dan memicu tugas-tugas tertentu. Setelah itu, browser-sync pembaruan pandangan kami dalam browser.
1 |
// task: BrowserSync
|
2 |
// Description: Run BrowserSync server with disabled ghost mode
|
3 |
gulp.task('browser-sync', function() { |
4 |
browserSync({ |
5 |
server: { |
6 |
baseDir: config.root |
7 |
},
|
8 |
ghostMode: true, |
9 |
open: "external" |
10 |
});
|
11 |
});
|
Kita menentukan file untuk pengamat dan memicu tugas-tugas yang kami butuhkan jika terjadi perubahan.
1 |
// Task: Watch files
|
2 |
gulp.task('watch', function () { |
3 |
|
4 |
// Watch Pattern Lab files
|
5 |
gulp.watch( |
6 |
config.patternlab.files, |
7 |
['patternlab'] |
8 |
);
|
9 |
|
10 |
// Watch scripts
|
11 |
gulp.watch( |
12 |
config.scripts.files, |
13 |
['scripts'] |
14 |
);
|
15 |
|
16 |
// Watch images
|
17 |
gulp.watch( |
18 |
config.images.files, |
19 |
['images'] |
20 |
);
|
21 |
|
22 |
// Watch Sass
|
23 |
gulp.watch( |
24 |
config.scss.files, |
25 |
['sass'] |
26 |
);
|
27 |
|
28 |
// Watch fonts
|
29 |
gulp.watch( |
30 |
config.fonts.files, |
31 |
['fonts'] |
32 |
);
|
33 |
});
|
Tugas 8: Tugas-Default
Menulis gulp
di shell memicu tugas default. Tapi sebelum Gulp memulai ini, itu memicu clean:before
tugas untuk membersihkan semua file publik.
1 |
// Task: Default
|
2 |
// Description: Build all stuff of the project once
|
3 |
gulp.task('default', ['clean:before'], function () { |
4 |
production = false; |
5 |
|
6 |
gulp.start( |
7 |
'patternlab', |
8 |
'styleguide', |
9 |
'fonts', |
10 |
'sass', |
11 |
'images', |
12 |
'scripts' |
13 |
);
|
14 |
});
|
Tugas 9: Mulai Proses
Mari buat tugas untuk dikembangkan di panduan gaya, tetapi tanpa mengurangi aset. Ini memicu browser-sync, membangun semua aset, dan memulai pengamat.
1 |
// Task: Start your production-process
|
2 |
// Description: Typ 'gulp' in the terminal
|
3 |
gulp.task('serve', function () { |
4 |
production = false; |
5 |
|
6 |
gulp.start( |
7 |
'browser-sync', |
8 |
'default', |
9 |
'watch' |
10 |
);
|
11 |
});
|
Tugas 10: Melepaskan dan penandaan
Untuk langkah ini, kita memerlukan beberapa plugin baru.
- Plugin gulp-bump adalah untuk memperbarui nomor versi.
- gulp-filter akan memberi kita file spesifik dari aliran.
- gulp-git memungkinkan kita untuk menggunakan pernyataan git di gulp.
- Dan versi gulp-tag adalah untuk menghasilkan tag.
1 |
// Install needed dependencies |
2 |
npm install gulp-bump gulp-filter gulp-git gulp-tag-version |
3 |
|
4 |
// Require dependencies |
5 |
var bump = require('gulp-bump'); |
6 |
var filter = require('gulp-filter'); |
7 |
var git = require('gulp-git'); |
8 |
var tagversion = require('gulp-tag-version'); |
Sekarang Anda menentukan release
gulp-task, mengatur produksi variabel menjadi true
(sekarang kita perlu mengecilkan) dan membuka aliran. Anda harus mengambil semua file dengan nomor versi, gunakan plugin bump dan memungkinkan untuk menentukan jenis (patch, minor atau major) melalui parameter di shell.
Jika Anda menjalankan tugas release
tanpa tipe, gulp-bump
akan mengambil patch - x.x.1. Setelah ini Anda mendorong file ke root dan melakukan perubahan. Sekarang saatnya membuat tag baru untuk proyek tersebut. File pakage.json
diperlukan untuk mendapatkan nomor versi saat ini untuk tag baru.
Akhirnya, kita mendorong semua file dan tag asal dan cabang yang kita inginkan.
1 |
// Function: Releasing (Bump & Tagging) |
2 |
// Description: Bump npm versions, create Git tag and push to origin |
3 |
gulp.task('release', function () { |
4 |
production = true; |
5 |
|
6 |
return gulp.src(config.versioning.files) |
7 |
.pipe(bump({ |
8 |
type: gulp.env.type || 'patch' |
9 |
})) |
10 |
.pipe(gulp.dest('./')) |
11 |
.pipe(git.commit('Release a ' + gulp.env.type + '-update')) |
12 |
|
13 |
// read only one file to get version number |
14 |
.pipe(filter('package.json')) |
15 |
|
16 |
// Tag it |
17 |
.pipe(tagversion()) |
18 |
|
19 |
// Publish files and tags to endpoint |
20 |
.pipe(shell([ |
21 |
'git push origin develop', |
22 |
'git push origin --tags' |
23 |
])); |
24 |
}); |
Tugas 11: Deployment
Memungkinkan untuk menerapkan semua file ke server melalui rsync; melakukannya sangat cepat dan nyaman. Ketikkan gulp deploy
di terminal Anda dan setelah beberapa detik Anda memiliki proyek lokal di server. Anda tidak perlu untuk drag dan drop folder secara manual. Mengotomatisasi semua hal. Anda menentukan host dan jalur folder, yang ingin Anda terapkan di build.config.js
.
1 |
// Task: Deploy static content |
2 |
// Description: Deploy static content using rsync shell command |
3 |
gulp.task('deploy', function () { |
4 |
return gulp.src(config.deployment.local.path, {read: false}) |
5 |
.pipe(shell([ |
6 |
'rsync '+ config.deployment.rsync.options +' '+ config.deployment.local.path +'/ '+ config.deployment.remote.host |
7 |
])) |
8 |
}); |
Akhir Gulpfile
Anda sudah menulis banyak kode, dan ini hasil akhirnya! Anda dapat memilih untuk memiliki file terpisah untuk setiap tugas, dalam hal ini Anda dipersilakan untuk memisahkannya. Dalam hal ini, demi kesederhanaan, kita akan menampilkan semuanya dalam Gulpfile tunggal:
1 |
var gulp = require('gulp'), |
2 |
bump = require('gulp-bump'), |
3 |
clean = require('gulp-clean'), |
4 |
concat = require('gulp-concat'), |
5 |
browserSync = require('browser-sync'), |
6 |
cssmin = require('gulp-cssmin'), |
7 |
filter = require('gulp-filter'), |
8 |
git = require('gulp-git'), |
9 |
gulpif = require('gulp-if'), |
10 |
imagemin = require('gulp-imagemin'), |
11 |
rename = require('gulp-rename'), |
12 |
sass = require('gulp-sass'), |
13 |
shell = require('gulp-shell'), |
14 |
tagversion = require('gulp-tag-version'), |
15 |
uglify = require('gulp-uglify'), |
16 |
config = require('./build.config.json'); |
17 |
|
18 |
// Trigger
|
19 |
var production; |
20 |
|
21 |
// Task: Clean:before
|
22 |
// Description: Removing assets files before running other tasks
|
23 |
gulp.task('clean:before', function () { |
24 |
return gulp.src( |
25 |
config.assets.dest |
26 |
)
|
27 |
.pipe(clean({ |
28 |
force: true |
29 |
}))
|
30 |
});
|
31 |
|
32 |
// Task: Handle scripts
|
33 |
gulp.task('scripts', function () { |
34 |
return gulp.src(config.scripts.files) |
35 |
.pipe(concat( |
36 |
'application.js' |
37 |
))
|
38 |
.pipe(gulpif(production, uglify())) |
39 |
.pipe(gulpif(production, rename({ |
40 |
suffix: '.min' |
41 |
})))
|
42 |
.pipe(gulp.dest( |
43 |
config.scripts.dest |
44 |
))
|
45 |
.pipe(browserSync.reload({stream:true})); |
46 |
});
|
47 |
|
48 |
// Task: Handle fonts
|
49 |
gulp.task('fonts', function () { |
50 |
return gulp.src(config.fonts.files) |
51 |
.pipe(gulp.dest( |
52 |
config.fonts.dest |
53 |
))
|
54 |
.pipe(browserSync.reload({stream:true})); |
55 |
});
|
56 |
|
57 |
// Task: Handle images
|
58 |
gulp.task('images', function () { |
59 |
return gulp.src(config.images.files) |
60 |
.pipe(gulpif(production, imagemin())) |
61 |
.pipe(gulp.dest( |
62 |
config.images.dest |
63 |
))
|
64 |
.pipe(browserSync.reload({stream:true})); |
65 |
});
|
66 |
|
67 |
// Task: Handle Sass and CSS
|
68 |
gulp.task('sass', function () { |
69 |
return gulp.src(config.scss.files) |
70 |
.pipe(sass()) |
71 |
.pipe(gulpif(production, cssmin())) |
72 |
.pipe(gulpif(production, rename({ |
73 |
suffix: '.min' |
74 |
})))
|
75 |
.pipe(gulp.dest( |
76 |
config.scss.dest |
77 |
))
|
78 |
.pipe(browserSync.reload({stream:true})); |
79 |
});
|
80 |
|
81 |
// Task: patternlab
|
82 |
// Description: Build static Pattern Lab files via PHP script
|
83 |
gulp.task('patternlab', function () { |
84 |
return gulp.src('', {read: false}) |
85 |
.pipe(shell([ |
86 |
'php core/builder.php -gpn' |
87 |
]))
|
88 |
.pipe(browserSync.reload({stream:true})); |
89 |
});
|
90 |
|
91 |
// Task: styleguide
|
92 |
// Description: Copy Styleguide-Folder from core/ to public
|
93 |
gulp.task('styleguide', function() { |
94 |
return gulp.src(config.patternlab.styleguide.files) |
95 |
.pipe(gulp.dest(config.patternlab.styleguide.dest)); |
96 |
});
|
97 |
|
98 |
// task: BrowserSync
|
99 |
// Description: Run BrowserSync server with disabled ghost mode
|
100 |
gulp.task('browser-sync', function() { |
101 |
browserSync({ |
102 |
server: { |
103 |
baseDir: config.root |
104 |
},
|
105 |
ghostMode: true, |
106 |
open: "external" |
107 |
});
|
108 |
});
|
109 |
|
110 |
// Task: Watch files
|
111 |
gulp.task('watch', function () { |
112 |
|
113 |
// Watch Pattern Lab files
|
114 |
gulp.watch( |
115 |
config.patternlab.files, |
116 |
['patternlab'] |
117 |
);
|
118 |
|
119 |
// Watch scripts
|
120 |
gulp.watch( |
121 |
config.scripts.files, |
122 |
['scripts'] |
123 |
);
|
124 |
|
125 |
// Watch images
|
126 |
gulp.watch( |
127 |
config.images.files, |
128 |
['images'] |
129 |
);
|
130 |
|
131 |
// Watch Sass
|
132 |
gulp.watch( |
133 |
config.scss.files, |
134 |
['sass'] |
135 |
);
|
136 |
|
137 |
// Watch fonts
|
138 |
gulp.watch( |
139 |
config.fonts.files, |
140 |
['fonts'] |
141 |
);
|
142 |
});
|
143 |
|
144 |
// Task: Default
|
145 |
// Description: Build all stuff of the project once
|
146 |
gulp.task('default', ['clean:before'], function () { |
147 |
production = false; |
148 |
|
149 |
gulp.start( |
150 |
'patternlab', |
151 |
'styleguide', |
152 |
'fonts', |
153 |
'sass', |
154 |
'images', |
155 |
'scripts' |
156 |
);
|
157 |
});
|
158 |
|
159 |
// Task: Start your production-process
|
160 |
// Description: Typ 'gulp' in the terminal
|
161 |
gulp.task('serve', function () { |
162 |
production = false; |
163 |
|
164 |
gulp.start( |
165 |
'browser-sync', |
166 |
'default', |
167 |
'watch' |
168 |
);
|
169 |
});
|
170 |
|
171 |
// Task: Deploy static content
|
172 |
// Description: Deploy static content using rsync shell command
|
173 |
gulp.task('deploy', function () { |
174 |
return gulp.src(config.deployment.local.path, {read: false}) |
175 |
.pipe(shell([ |
176 |
'rsync '+ config.deployment.rsync.options +' '+ config.deployment.local.path +'/ '+ config.deployment.remote.host |
177 |
]))
|
178 |
});
|
179 |
|
180 |
// Function: Releasing (Bump & Tagging)
|
181 |
// Description: Bump npm versions, create Git tag and push to origin
|
182 |
gulp.task('release', function () { |
183 |
production = true; |
184 |
|
185 |
return gulp.src(config.versioning.files) |
186 |
.pipe(bump({ |
187 |
type: gulp.env.type || 'patch' |
188 |
}))
|
189 |
.pipe(gulp.dest('./')) |
190 |
.pipe(git.commit('Release a ' + gulp.env.type + '-update')) |
191 |
|
192 |
// read only one file to get version number
|
193 |
.pipe(filter('package.json')) |
194 |
|
195 |
// Tag it
|
196 |
.pipe(tagversion()) |
197 |
|
198 |
// Publish files and tags to endpoint
|
199 |
.pipe(shell([ |
200 |
'git push origin develop', |
201 |
'git push origin --tags' |
202 |
]));
|
203 |
});
|
ConfigFile
Sekarang kita memerlukan konfigurasi untuk mengatur berbagai jalur. File ini diperlukan untuk mempertahankan jalur dan konfigurasi proyek:
1 |
{
|
2 |
"root": "./public", |
3 |
"deployment": { |
4 |
"local": { |
5 |
"path": "public" |
6 |
},
|
7 |
"remote": { |
8 |
"host": "YOUR HOST" |
9 |
},
|
10 |
"rsync": { |
11 |
"options": "-avzh --delete -e ssh" |
12 |
}
|
13 |
},
|
14 |
"assets": { |
15 |
"base": "source/assets/", |
16 |
"dest": "public/assets/" |
17 |
},
|
18 |
"versioning": { |
19 |
"files": [ |
20 |
"./package.json", |
21 |
"./bower.json" |
22 |
]
|
23 |
},
|
24 |
"scripts": { |
25 |
"base" : "source/assets/javascripts/", |
26 |
"files" : [ |
27 |
"source/assets/javascripts/**/*.js" |
28 |
],
|
29 |
"dest" : "public/assets/javascripts/" |
30 |
},
|
31 |
"components": { |
32 |
"base": "source/assets/components/" |
33 |
},
|
34 |
"scss": { |
35 |
"base" : "source/assets/scss/", |
36 |
"files": [ |
37 |
"source/assets/scss/**/*.scss" |
38 |
],
|
39 |
"dest" : "public/assets/stylesheets/" |
40 |
},
|
41 |
"fonts": { |
42 |
"base" : "source/assets/fonts/", |
43 |
"files": [ |
44 |
"source/assets/fonts/**/*" |
45 |
],
|
46 |
"dest" : "public/assets/fonts/" |
47 |
},
|
48 |
"images": { |
49 |
"base" : "source/assets/images/", |
50 |
"files": [ |
51 |
"source/assets/images/**/*" |
52 |
],
|
53 |
"dest" : "public/assets/images/" |
54 |
},
|
55 |
"patternlab": { |
56 |
"styleguide": { |
57 |
"files": [ |
58 |
"core/styleguide/**" |
59 |
],
|
60 |
"dest": "public/styleguide/" |
61 |
},
|
62 |
"files": [ |
63 |
"source/_patterns/**/*.mustache", |
64 |
"source/_patterns/**/*.json", |
65 |
"source/_data/*.json" |
66 |
]
|
67 |
}
|
68 |
}
|
Kesimpulan
Saya suka bekerja dengan kombinasi Gulp dan Pattern Lab. Saya telah bekerja di tim yang berbeda dan menetapkan dasar ini untuk setiap proyek. Umpan balik oleh setiap anggota tim selalu positif karena prosesnya mudah diikuti. Setiap orang memiliki permukaan yang solid, dapat memilih modul dan menggunakannya dengan mudah. Untuk pertanyaan atau feedback, silakan lihat bagian komentar di bawah ini.