Advertisement
  1. Web Design
  2. UX/UI
  3. UX Design

Kombinieren von Pattern Lab mit Gulp für einen verbesserten Workflow

Scroll to top
Read Time: 15 min

() 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.

patternlab header organismpatternlab header organismpatternlab header organism
Musterlabor-Header-Organismus, auf kleinem Bildschirm zu sehen

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.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.