RubyConf China 2015 - Rails off assets pipeline

70
Rails off Asset Pipeline Florian, Senior Backend Engineer @ Strikingly @fdutey

Transcript of RubyConf China 2015 - Rails off assets pipeline

Page 1: RubyConf China 2015 - Rails off assets pipeline

Rails off Asset PipelineFlorian, Senior Backend Engineer @ Strikingly

@fdutey

Page 2: RubyConf China 2015 - Rails off assets pipeline

Quick poll

• Rails application?

• Using Assets Pipeline?

• Not satisfied?

Page 3: RubyConf China 2015 - Rails off assets pipeline

History

Page 4: RubyConf China 2015 - Rails off assets pipeline

Server-side Rendering + Simple JavaScript

Page 5: RubyConf China 2015 - Rails off assets pipeline

Rails Asset Pipeline

• Added in Rails 3.1 (2011)

• Based on Sprockets (Assets joiner for Rack)

Page 6: RubyConf China 2015 - Rails off assets pipeline

Benefits

• Introduce some FE good practices in BE world

• Deliver a single Javascript file per page

• CSS + JS minifying and image sprites

• Promote compilers (less, coffee, sass…)

• Very simple

Page 7: RubyConf China 2015 - Rails off assets pipeline

Today

Page 8: RubyConf China 2015 - Rails off assets pipeline

Client-side rendering + data API

Page 9: RubyConf China 2015 - Rails off assets pipeline

• Multiple clients, single API

• Web is just ONE client

• Front End is (very) complex

Page 10: RubyConf China 2015 - Rails off assets pipeline

Asset Pipeline Today

Page 11: RubyConf China 2015 - Rails off assets pipeline

Humansbehind technology

Page 12: RubyConf China 2015 - Rails off assets pipeline

Dependencies

Page 13: RubyConf China 2015 - Rails off assets pipeline
Page 14: RubyConf China 2015 - Rails off assets pipeline

NPM

Page 15: RubyConf China 2015 - Rails off assets pipeline

Bundles

Page 16: RubyConf China 2015 - Rails off assets pipeline
Page 17: RubyConf China 2015 - Rails off assets pipeline
Page 18: RubyConf China 2015 - Rails off assets pipeline

CommonJS

Page 19: RubyConf China 2015 - Rails off assets pipeline
Page 20: RubyConf China 2015 - Rails off assets pipeline

Cross-pipelines references

Page 21: RubyConf China 2015 - Rails off assets pipeline
Page 22: RubyConf China 2015 - Rails off assets pipeline
Page 23: RubyConf China 2015 - Rails off assets pipeline

What about?

Page 24: RubyConf China 2015 - Rails off assets pipeline

From Assets pipeline to Module Bundler

Page 25: RubyConf China 2015 - Rails off assets pipeline

Module bundlers

• Broccolijs (Ember-cli default)

• Gulp

• Grunt

• Webpack

• …

Page 26: RubyConf China 2015 - Rails off assets pipeline

Webpack

Page 27: RubyConf China 2015 - Rails off assets pipeline

Webpack

• Can do what asset pipeline does

• Support modular JavaScript

• Fully integrated with NPM

• Even more …

Page 28: RubyConf China 2015 - Rails off assets pipeline

Migrating recipe

• Put your new sources in a different spot

• Setup npm and webpack

• Move Javascript + Images

• Move CSS + Images

Page 29: RubyConf China 2015 - Rails off assets pipeline

Setting up NPM + Webpack

Page 30: RubyConf China 2015 - Rails off assets pipeline
Page 31: RubyConf China 2015 - Rails off assets pipeline

webpack.config.js

Page 32: RubyConf China 2015 - Rails off assets pipeline

package.json (npm)

Page 33: RubyConf China 2015 - Rails off assets pipeline

Moving Javascript

Page 34: RubyConf China 2015 - Rails off assets pipeline

CommonJS

• Each file is a module

• A module need to explicitly declare what’s visible to other modules with “exports”

• Others modules can access “exports” by using “require”

Page 35: RubyConf China 2015 - Rails off assets pipeline
Page 36: RubyConf China 2015 - Rails off assets pipeline
Page 37: RubyConf China 2015 - Rails off assets pipeline

webpack.config.js

Page 38: RubyConf China 2015 - Rails off assets pipeline
Page 39: RubyConf China 2015 - Rails off assets pipeline

External dependencies

Page 40: RubyConf China 2015 - Rails off assets pipeline
Page 41: RubyConf China 2015 - Rails off assets pipeline
Page 42: RubyConf China 2015 - Rails off assets pipeline
Page 43: RubyConf China 2015 - Rails off assets pipeline

Images

Page 44: RubyConf China 2015 - Rails off assets pipeline

It works!!!

Page 45: RubyConf China 2015 - Rails off assets pipeline
Page 46: RubyConf China 2015 - Rails off assets pipeline
Page 47: RubyConf China 2015 - Rails off assets pipeline
Page 48: RubyConf China 2015 - Rails off assets pipeline
Page 49: RubyConf China 2015 - Rails off assets pipeline

CSS

Page 50: RubyConf China 2015 - Rails off assets pipeline
Page 51: RubyConf China 2015 - Rails off assets pipeline
Page 52: RubyConf China 2015 - Rails off assets pipeline
Page 53: RubyConf China 2015 - Rails off assets pipeline
Page 54: RubyConf China 2015 - Rails off assets pipeline

Move externals into Webpack

Page 55: RubyConf China 2015 - Rails off assets pipeline
Page 56: RubyConf China 2015 - Rails off assets pipeline
Page 57: RubyConf China 2015 - Rails off assets pipeline
Page 58: RubyConf China 2015 - Rails off assets pipeline
Page 59: RubyConf China 2015 - Rails off assets pipeline

Shrink GemfileBest activity ever!

Page 60: RubyConf China 2015 - Rails off assets pipeline

Get rid of asset pipeline

Page 61: RubyConf China 2015 - Rails off assets pipeline
Page 62: RubyConf China 2015 - Rails off assets pipeline
Page 63: RubyConf China 2015 - Rails off assets pipeline
Page 64: RubyConf China 2015 - Rails off assets pipeline
Page 65: RubyConf China 2015 - Rails off assets pipeline

Short demo

Page 66: RubyConf China 2015 - Rails off assets pipeline

What else?• Minifying (with easy control)

• Bundles grow super big

• Optimisation and introspection tools

• Easy split code tools

• Semi-automatic common chunks

• Bunch of loaders for (almost) any type of file

Page 67: RubyConf China 2015 - Rails off assets pipeline

Recap• Rails

• Good for prototyping

• Good to discover FE good practices

• Doesn’t fit for large javascript applications

• Looked production-ready in 2011 because server-side rendering technology is very limited

• Front end world

• Solves its own problems :)

Page 68: RubyConf China 2015 - Rails off assets pipeline

I didn’t talk about

• Bower (enhanced dependencies management)

• React (last FE revolution from Facebook)

• ES2015 (coffeescript replacement)

• Babel (ES2015 + Jsx compiler)

Page 69: RubyConf China 2015 - Rails off assets pipeline
Page 70: RubyConf China 2015 - Rails off assets pipeline

Q & A

/strikingly/rails-webpack-starter/