Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Front End Workflow
Search
Matt Bailey
October 17, 2015
Technology
2
1.2k
Front End Workflow
A look at current front end workflow - tools, techniques, methodologies.
Matt Bailey
October 17, 2015
Tweet
Share
More Decks by Matt Bailey
See All by Matt Bailey
How I acheived a pretty good Google PageSpeed Insights score
mattbailey
1
130
Workshop: Making Responsive Websites Fast
mattbailey
0
55
GPMD - Our Journey
mattbailey
0
69
Other Decks in Technology
See All in Technology
DynamoDB のデータを QuickSight で可視化する際につまづいたこと/stumbling-blocks-when-visualising-dynamodb-with-quicksight
emiki
0
110
生成AIのユースケースをとにかく集めてまるっと学ぶ!/ all about generative ai usecases
gakumura
3
370
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
5.5k
クラウドネイティブ環境の脅威モデリング
kyohmizu
1
310
ガバクラのAWS長期継続割引 ~次の4/1に慌てないために~
hamijay_cloud
1
590
勝手に!深堀り!Cloud Run worker pools / Deep dive Cloud Run worker pools
iselegant
4
640
Azure × MCP 入門
ry0y4n
6
850
AIと共に乗り越える、 入社後2ヶ月の苦労と学習の軌跡
sai_kaneko
0
190
製造業向けIoTソリューション提案資料.pdf
haruki_uiru
0
170
AIにおけるソフトウェアテスト_ver1.00
fumisuke
1
350
正式リリースされた Semantic Kernel の Agent Framework 全部紹介!
okazuki
0
350
GraphQLを活用したリアーキテクチャに対応するSLI/Oの再設計
coconala_engineer
0
200
Featured
See All Featured
How GitHub (no longer) Works
holman
314
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
The Cult of Friendly URLs
andyhume
78
6.3k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
RailsConf 2023
tenderlove
30
1.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
How to train your dragon (web standard)
notwaldorf
91
6k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Designing for Performance
lara
608
69k
Transcript
Front End Workflow
None
My Journey Where I’ve Come From Where I Am Now
What’s Next
Matt Bailey @_mattbailey mattbailey.io
Creative Director gpmd.co.uk
Design Front End Development
My Journey
Where I’ve Come From
The Transition From Analogue To Digital
None
None
Where I Am Now
It’s still very much a journey Learning new things on
a daily basis
Responsive Web Design
None
Responsive Web Design Has Created Significant Challenges A Need For
A More ‘Agile’ Approach In Our Design Process
None
None
None
Design & Development Tools Have Changed Dramatically
None
None
Countless Frameworks, Platforms, Content Management Systems, Site Generators etc.
None
Source code and version control management
Consistent Development Environments
None
Multi-device testing
None
Dependency And Package Managers, Preprocessors, Build Tools, And Methodologies
None
Coding Languages, Coding Style And Methodologies
CSS Preprocessors Less Sass (SCSS) Stylus
Huge Increase In Efficiency More Like A ‘Proper’ Programming Language
Variables Mixins Functions Extends And so on…
BEM Block Element Modifier
.block {} .block__element {} .block__element--modifier {}
BEM helps us write CSS that… Easy to scale Is
clear and obvious in its purpose Is self-documenting http://www.gpmd.co.uk/blog/our-approach-to-bem/
ITCSS Inverted Triangle CSS Harry Roberts (CSS Wizardry)
Settings Tools Generic Base Objects Vendor Components Trumps
A Highly Modular Way Of Structuring CSS Starts With Low
Specificity (HTML tags) Rules Ends With High Specificity/Complexity Rules http://www.gpmd.co.uk/blog/scalable-css/
my-project/ `- src/ `- styles/ |- settings/ # Variables |-
tools/ # Functions, mixins etc. |- generic/ # Low-specificity (normalize) |- base/ # Unclassed HTML elements |- objects/ # Design-free objects & patterns |- vendor/ # Third party components |- components/ # Modules, widgets etc. (theme) `- trumps/ # Helper classes and overrides
Sassbase https://github.com/gpmd/sassbase
Performance & Optimisation
Image Optimisation & Delivery
‘picture’ element, & ’srcset’ and ‘sizes’ Content Delivery Networks Image
Management Pipeline - Dynamically deliver different image sizes and file formats (WebP, JPEGXR etc.) to end users
Critical Rendering Path
Methods And Best Practices For Improving The Render Time Of
Our Pages Minify/uglifying Remove render blocking CSS/JavaScript Load JavaScript asynchronously Inline critical CSS in the head etc…
A Hugely Diverse Role
Coding Standards & Conventions Style Guides and Pattern Libraries Dependency
Management & Package Managers Build Systems Regression Testing Performance Optimisation Continuous Integration Documentation
Designer & Front End Architect
–Elyse Holladay “I want to build systems, architectures. I want
my users to be my fellow developer and designers as much as the end user. I want to make a site where the code on the inside looks as great as the outside, and make it easy to do things like theme, A/B test, and build new modules.”
Let’s Do This
None
Project Structure
my-project/ # Project (Git) root | |- public_html/ # Web
root | `- themes/ | `- my-theme/ # (dist) Build destination | |- src/ # Source files | |- bower_components/ # Front end components |- bower.json | |- node_modules/ # Build dependencies |- package.json | `- Gruntfile.js # Build config
Dependency Management
Build System Dependencies
grunt grunt-autoprefixer grunt-concurrent grunt-contrib-clean grunt-contrib-concat grunt-contrib-copy grunt-contrib-cssmin grunt-contrib-imagemin grunt-contrib-jshint grunt-contrib-uglify
grunt-contrib-watch grunt-csscss grunt-modernizr grunt-sass grunt-scss-lint grunt-spritesmith grunt-stylestats load-grunt-config jshint-stylish time-grunt
Front End Components
picturefill modernizr normalize.css normalize-opentype.css jquery respond jquery-hoverIntent smooth-scroll owl-carousel2 background-size-polyfill
jquery-replacetext CSS3MultiColumn isotope imagesloaded tablesaw
Build System
Task Manager
Gruntfile.js load-grunt-config - separate out task configs build environments -
‘prod’ and ‘dev’
module.exports = function(grunt) { # Use load-grunt-config require('load-grunt-config')(grunt, { jitGrunt:
true, # Use fast plugin loader init: true, data: { # $ grunt --env=prod (or) --env=dev env: grunt.option('env') || 'prod', # src and dynamic dist locations project: { src: 'src', dist: '<% if (env === "prod") { %>tmp<% } else { %>dist<% } %>' } } }); };
Grunt Task Configs In Separate Files
my-project/ | |- grunt/ | |- sass.js | |- uglify.js
| |- watch.js | `- # etc. | `- Gruntfile.js
aliases.js
module.exports = function(grunt, data) { var env = data.env ||
'prod'; return { default: { # Default build tasks: [env] }, dev: { # Dev build tasks tasks: [ ‘concurrent:devFirst', 'concurrent:devSecond' ] }, prod: { # Production build tasks tasks: [ 'concurrent:prodFirst', 'concurrent:prodSecond' ] } }; };
concurrent.js
module.exports = { options: { limit: 3 }, devFirst: [
# 1st dev target 'clean:dev' ], devSecond: [ # 2nd dev target 'sass:dev', 'uglify:dev' ], prodFirst: [ # 1st production target 'clean:prod' ], prodSecond: [ # 2nd production target 'sass:prod', 'uglify:prod' ] };
Sass Tasks grunt-sass - Uses fast libsass compiler grunt-scss-lint -
Lint your SCSS files css-min - Efficient CSS minifier
CSS Reporting Tasks grunt-csscss - Find duplicated declarations grunt-stylestats -
Evaluate & report CSS stats
And the rest… grunt-autoprefixer grunt-modernizr grunt-contrib-concat grunt-contrib-imagemin grunt-spritesmith grunt-contrib-jshint grunt-contrib-uglify
grunt-contrib-watch etc…
Gruntbase https://github.com/gpmd/gruntbase
Git Hooks
post-merge Runs after a `git merge` or `git pull`
1. Checks for changed files 2. Runs npm install &&
npm prune 3. Runs bower install && bower prune 4. Runs grunt
pre-commit Runs before a `git commit`
1. Runs grunt 2. Won’t commit if build fails git
commit -m “My Message” -n
my-project/ | |- .git | `- hooks | |- post-merge
-> ../../githooks/post-merge | `- pre-commit -> ../../githooks/pre-commit | `- githooks |- post-merge `- pre-commit
Initial Setup
setup.sh > 1. githooks.sh # Creates Git hook symlinks 2.
build.sh # Installs dependencies and runs build
What’s Next?
None
CSS Namespacing
More transparent code http://csswizardry.com/2015/03/more- transparent-ui-code-with-namespaces/
o- # object c- # Component u- # utility t-
# theme s- # Scope is-, has- # State _ # Hack js- # Javascript qa- # QA
‘Living’ Style Guides
None
SC5 Styleguide Generator Hologram Pattern Lab Fabricator SourceJS http://www.smashingmagazine.com/2015/04/an-in- depth-overview-of-living-style-guide-tools/
Visual Regression Testing
None
BackstopJS Resemble.js PhantomCSS
Deployment Server Continuous Integration (Lite)
One server for all builds All the build tools and
dependencies in one place Push only built code to production server
That’s All Folks
None
Thank You speakerdeck.com/mattbailey/front-end-workflow @_mattbailey mattbailey.io