Kombinieren von Pattern Lab mit Gulp für einen verbesserten Workflow
() translation by (you can also view the original English article)
Arbeiten Sie und Ihr Team mit Styleguides? Haben Sie Dokumentation für Ihre Module? Wenn nicht, keine Panik. In diesem Tutorial zeige ich Ihnen, wie Sie Ihre Arbeitsweise mit Ihrem Team verbessern können. Wir werden die von Brad Frost und Dave Olsen vorgeschlagenen Konzepte untersuchen und mithilfe von Pattern Lab Styleguides erstellen, während Gulp die Assets verwaltet. Lass uns anfangen!
Was ist Gulp?
Gulp.js ist ein Streaming-Build-System und ein Task-Runner. Das wichtige Konzept ist, dass Sie Streams haben, wo Sie viele Dinge für Ihre Dateien definieren können. Es ist schneller als die manuelle Verwaltung, spart Nerven und viel Zeit. In diesem Tutorial werden wir alle unseren Sass-Dateien in eine Pipe (einen Prozess) einfügen:
- Kompilieren von Sass zu CSS,
- Verketten der CSS-Dateien,
- Minimierung der Ausgabe,
- und alles an einen anderen Ort verschieben
Weitere Informationen zu den Grundlagen von Gulp finden Sie in Kezz Braceys Anfängerhandbuch Die Befehlszeile für Webdesign: Automatisierung mit Gulp.
Was ist Pattern Lab?
Pattern Lab ist ein Konzept zur Erstellung der atomaren Entwurfssysteme. Erstellen von Modulen statt direktes Erstellen von Seiten. Es definiert mehrere Verbundteile:
- atoms
- molecules
- organisms
- templates
- pages
Sie beginnen mit dem kleinsten Element und bauen es zu größeren Teilen aus, bis Sie ganze Seiten haben. Dieser Ansatz hilft Ihnen, Zeit zu sparen, zusammenzuarbeiten und eine solide Struktur zu gewährleisten.
Atoms
Atoms können nicht in kleinere Stücke zerlegt werden.



Dies sind die einfachsten Blöcke, einschließlich grundlegender Tags wie Listen, Farben, Schriftarten, Animationen usw.
Molecules
Molecules sind Gruppen verschiedener Elemente (atoms), die wie eine Einheit zusammenwirken.



Zum Beispiel ein Teaser mit einer Überschrift, einem Bild, einem Absatz und einem Link wie "Lesen Sie mehr". Jedes von diesen ist ein einzelnes Element, aber zusammen werden sie ein Molekül; Teil eines größeren, komplexeren Systems.
Organisms
Organisms sind Gruppen von Elementen (atoms und molecules) und funktionieren wie ein Abschnitt auf Ihrer Website.



Denken Sie zum Beispiel an einen Website-Header. Es ist ein größeres System, das aus Molekülen wie einer Suchform und einer Navigation aufgebaut ist, die beide wiederum aus kleineren Atomen bestehen.



Schauen Sie sich die Online-UI-Demos an und machen Sie sich ein Bild vom gesamten System.
Lassen Sie die Magie geschehen!
Jetzt ist es an der Zeit, beide Systeme zu kombinieren und einen Workflow für Ihr Team zu erstellen. Pattern Lab wird uns unseren HTML-Code zur Verfügung stellen und die einfache Benutzeroberfläche bereitstellen. Gulp wird alle benötigten Assets verwalten.
Unsere Hauptmerkmale:
- Sass-Compiling (Libsass)
- Server (Browser-Sync)
- Livereload
- Minimieren (Javascript, CSS und Bilder)
- Freigabe / Bereitstellung
- Bump up die Version
- Markieren
- Push-Dateien und Tags zum Endpunkt
- Übertragen Sie Dateien über rsync auf einen Server
Einführung
Um Gulp verwenden zu können, muss zunächst node.js auf Ihrem System vorhanden sein. Wenn Sie dies nicht tun, finden Sie Anweisungen zur Einrichtung in Kezz Braceys Befehlszeile für Webdesign: Zähmen von Paketen von Drittanbietern.
Beginnen wir mit der globalen Installation von Gulp.js. Geben Sie im Terminal Folgendes ein:
1 |
npm install gulp -g |
Jetzt müssen wir das Repository von Patternlab klonen, um eine Basis für die Arbeit zu erhalten.
1 |
git clone git@github.com:pattern-lab/patternlab-php.git |
Als nächstes benötigen wir eine Schluckdatei, um unsere Aufgaben einzurichten. Erstellen Sie eine gulpfile.js
im Stammverzeichnis Ihres Projektordners. Danach benötigen wir eine Konfigurationsdatei, in der wir alle Pfade definieren. Erstellen Sie daher eine build.config.json
in Ihrem Ordner.
Folgende Dateien werden ebenfalls benötigt:
.bowerrc
package.json
bower.json
Nach all diesen grundlegenden Schritten haben wir die grundlegende Projektstruktur. Beginnen wir nun damit, die Aufgaben für unseren Workflow zu erstellen.
Beginnen Sie mit dem Gulpfile
Oben in unserer Datei gulpfile.js benötigen wir jede Abhängigkeit. Wenn Sie ein Plugin installieren, müssen Sie es "require" und ihm einen Namen geben.
Beginnen Sie mit gulp und unserer Konfigurationsdatei für alle Pfade und Konfigurationen.
1 |
var gulp = require('gulp'), |
2 |
config = require('./build.config.json'); |
Während unseres Entwicklungsprozesses müssen wir unseren Code nicht minimieren (dies ist Zeitverschwendung, es sei denn, wir sind bereit zur Bereitstellung). Mit der folgenden production
variablen können wir einige Aufgaben ein- und ausschalten. Sie werden dies später in Aktion sehen.
1 |
// Production Handling
|
2 |
// Description: Use 'production' variable with 'gulpif'
|
3 |
// Toggle minifing and optimization for assets
|
4 |
var production; |
Mit der Einrichtung können wir nun verschiedene Aufgaben hinzufügen, die uns bei unserer Entwicklung helfen!
Aufgabe 1: Alle Assets bereinigen
1 |
// Install needed dependency
|
2 |
npm install gulp-clean |
3 |
|
4 |
// Require dependency
|
5 |
var clean = require('gulp-clean'); |
Wenn Sie ein Bild aus dem Ordner "source/" löschen, finden Sie auch in "public/" eine Kopie des Bildes. Aufgrund dieser Duplizierung führen wir einen einfachen Schritt aus, um den Bildordner in "public/" zu bereinigen.
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 |
});
|
Aufgabe 2: Skripte verarbeiten
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'); |
Für Bereitstellungszwecke ist es wichtig, nur eine Datei mit allen Skripten zu haben. Um dies zu erreichen, verwenden wir das Plugin gulp-concat und kombinieren alle unsere Skripte, um application.js
zu erstellen. Wenn die variable production
wahr ist, wird application.js
hässlich und erhält einen neuen Namen: 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 |
});
|
Aufgabe 3: Schriftarten
Diese Aufgabe verschiebt alle Schriftarten in den öffentlichen Ordner. Nichts mehr.
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 |
});
|
Aufgabe 4: Bilder
Für diesen Schritt installieren wir das Plugin gulp-imagemin und benötigen es. Sobald wir dies getan haben, können wir damit Bilder minimieren. Dies spart Speicher und steigert die Leistung.
1 |
// Install imagemin
|
2 |
npm install gulp-imagemin |
3 |
|
4 |
// Require dependencies
|
5 |
var imagemin = require('gulp-imagemin'); |
Wenn die variable production
wahr ist, werden alle Bilder minimiert. Nachdem dies erledigt ist, verschieben wir sie in den Zielordner.
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 |
});
|
Aufgabe 5: Sass anfassen
Installieren und fordern wir die Abhängigkeiten gulp-sass und 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'); |
Jetzt nehmen wir alle Sass-Dateien und kompilieren sie mit dem Sass-Plugin zu CSS. Wenn die variable production
wahr ist, erledigt cssmin seine Aufgabe.
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 |
});
|
Aufgabe 6: Pattern Lab Server
Pattern Lab verfügt über einen eigenen Server, den Sie mit einem einfachen Shell-Befehl starten können. Um diesen Befehl auszuführen, benötigen wir das Plugin gulp-shell.
1 |
// Install needed dependencies
|
2 |
npm install gulp-shell |
3 |
|
4 |
// Require dependencies
|
5 |
var shell = require('gulp-shell'); |
An dieser Stelle kopieren wir den Styleguide-Ordner vom Kern in die public. Zu diesem Zeitpunkt sehen Sie im Browser ein solides Front-End.
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 |
});
|
Aufgabe 7: Server starten und Dateien überwachen
Pattern Lab verfügt über einen integrierten Server, aber Browser-Sync übernimmt das Einfügen von CSS-Änderungen ohne erneutes Laden der Seite.
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'); |
Der Beobachter kümmert sich um Änderungen und löst die spezifischen Aufgaben aus. Danach aktualisiert die Browsersynchronisierung unsere Ansicht im 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 |
});
|
Wir geben die Dateien für den Watcher an und lösen die Aufgaben aus, die wir im Falle einer Änderung benötigen.
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 |
});
|
Aufgabe 8: Standardaufgabe
Das Schreiben von gulp
in die Shell löst die Standardaufgabe aus. Bevor Gulp dies startet, wird die Bereinigung clean:before
der Aufgabe, alle öffentlichen Dateien zu bereinigen.
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 |
});
|
Aufgabe 9: Den Prozess starten
Lassen Sie uns eine Aufgabe erstellen, die am Styleguide entwickelt werden soll, ohne jedoch die Ressourcen zu minimieren. Das löst die Browsersynchronisierung aus, erstellt alle Assets und startet den Watcher.
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 |
});
|
Aufgabe 10: Freigeben und Markieren
Für diesen Schritt benötigen wir einige neue Plugins.
- Das Plugin gulp-bump dient zum Aktualisieren der Versionsnummer.
- gulp-filter gibt uns eine bestimmte Datei des Streams.
- Mit gulp-git können wir git-Anweisungen in gulp verwenden.
- Und die gulp-tag-version dient zum Generieren des Tags.
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'); |
Jetzt definieren Sie die Gulp-Task release
, setzen die variable Produktion auf true
(jetzt müssen wir sie minimieren) und öffnen den Stream. Sie müssen alle Dateien mit einer Versionsnummer nehmen, den Plugin-Bump verwenden und es ermöglichen, den Typ (Patch, Minor oder Major) über einen Parameter in der Shell zu definieren.
Wenn Sie die release
-Task ohne Typ ausführen, benötigt gulp-bump
einen Patch - x.x.1. Danach verschieben Sie die Dateien in das Stammverzeichnis und übernehmen die Änderungen. Jetzt ist es Zeit, ein neues Tag für das Projekt zu generieren. Die Datei package.json
wird benötigt, um die aktuelle Versionsnummer für das neue Tag abzurufen.
Schließlich verschieben wir alle Dateien und Tags an den Ursprung und in den gewünschten Zweig.
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 |
}); |
Aufgabe 11: Deployment
Es ist möglich, alle Dateien über rsync auf einem Server bereitzustellen. Das ist super schnell und bequem. Geben Sie gulp deploy
in Ihr Terminal ein und nach einigen Sekunden haben Sie das lokale Projekt auf dem Server. Sie müssen Ordner nicht manuell ziehen und ablegen. Automatisieren Sie alle Dinge. Sie definieren den Host und den Pfad des Ordners, den Sie in build.config.js
bereitstellen möchten.
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 |
}); |
Final Gulpfile
Sie haben so viel Code geschrieben und hier ist das Endergebnis! Möglicherweise möchten Sie für jede Aufgabe eine eigene Datei haben. In diesem Fall können Sie diese gerne aufteilen. In diesem Fall wird der Einfachheit halber alles in einem einzigen Gulpfile angezeigt:
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 |
});
|
Konfigurationsdatei
Jetzt brauchen wir unsere Konfigurationsdatei, um die verschiedenen Pfade festzulegen. Diese Datei ist erforderlich, um die Pfade und die Konfiguration des Projekts zu verwalten:
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 |
}
|
Abschluss
Ich mag mit einer Kombination aus Gulp und Pattern Lab arbeiten. Ich habe in verschiedenen Teams gearbeitet und diese Grundlage für jedes Projekt geschaffen. Das Feedback jedes Teammitglieds war aufgrund seines leicht verständlichen Prozesses immer positiv. Jeder hat eine feste Oberfläche, kann das Modul auswählen und problemlos verwenden. Für Fragen oder Feedback lesen Sie bitte den Kommentarbereich unten.