MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE...

99
@prpatel MOdern Java(Script) Server Stack Pratik Patel @prpatel

Transcript of MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE...

Page 1: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

MOdern Java(Script) Server Stack

Pratik Patel @prpatel

Page 2: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

Pratik Patel @prpatel

CTO Triplingo

JAVA CHAMPION PRESIDENT ATLANTA JUG

Page 3: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

POLYGLOT

Page 4: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

TURTLE

MY FIRST PROGRAM

apple mac vintage 5" screen

Page 5: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

TURING

MY FIRST REAL PROGRAM

Page 6: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

JAVASCRIPT

RUBY ANDROID

JAVA GROOVY

IOS

Page 7: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

MANY HATS

Page 8: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

java STACK

Page 9: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

java THREAD MODEL

Page 10: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

JAVASCRIPT

Page 11: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

WHY?

ECOSYSTEM

TOOLS

Page 12: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

Yesterday’s Javascript

Page 13: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

TODAY’s Javascript

Page 14: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

WHAT’s CHANGED?

Page 15: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelNO CHANGE (UNTIL RECENTLY)!

JS IS the same Language it was 20 years ago

Page 16: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWe’ve changed

best practices

TOOLING

MUCH BETTER RUNTIMES

Page 17: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWHAT HASN’T CHANGED

JS Still has BAD PARTS

ASYNC, EVENT-DRIVEN

EVERY BROWSER SUPPORT

Page 18: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

JS OUTSIDE THE BROWSER?

Page 19: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelV8

Super fast JS runtime

included in chrome

RUNS on CLI/server

Page 20: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

NODE.js

Page 21: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWHAT ABOUT THE JVM?

BUILT INTO JVM FOR YEARS

rhino (current)

Nashorn (next gen)

Page 22: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

WHY JAVASCRIPT ON THE SERVER?

Page 23: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWHY JS?

SINGLE LANG FOR BROWSER & SERVERFAST

SCALABLE

Page 24: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

ISOMORPHIC APPS

Page 25: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelisomorphic apps

code can run either on browser or server!

Page 26: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

“Traditional” Webapp

Page 27: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

Isomorphic

Page 28: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelwhy isomorphic?

flexibility

performance

Page 29: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

WHY DO WE CARE ABOUT

NODE.JS?

Page 30: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWHY node?

Bevy of tools for webdev

ISOMORPHIC APPS

SCALABLE SOLUTIONS

Page 31: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWHY node?

SOURCE CODE QUALITY

BUNDLING / development

server-side JS

Page 32: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelmodules

express, grunt, gulp, webpack, jasmine, BROWSERSYNC, etc

Page 33: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelSCALABLE

Page 34: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelNOT SCALABLE

Page 35: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelSCALABLE

Page 36: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

PERFORMANCE NUMBERS

Page 37: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelNODE VS JAVA WEB REQS

NODE - ~10k REQ / second

WHAT ABOUT JAVA?

Page 38: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

VERT.X

Page 39: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

RXJAVA

Page 40: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelBusiness Logic / API Layer

ARCHITECTURE

Java Ruby PythonData Store

JavaScript

Presentation

Web Mobile Bots

Page 41: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

ECOSYSTEM

Page 42: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelecosystem

NODE.JS

NPM

LOTS OF MODULES

Page 43: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelNODE.js

javascript runtime based on v8

Page 44: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelnpm

node package manager

Page 45: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelmodules

express, grunt, gulp, webpack, jasmine, etc

Page 46: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

NODE.JS

Page 47: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelnode.js

Install from nodejs.org

install using brew (mac)

Page 48: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelnode.js

run from command-line

Page 49: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

$nodetest3.jsHelloBangalore!

———-test3.js:console.log('HelloBangalore!')

NODE.JS

Page 50: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

//describesthisnodeproject,placeinbasefolder{"name":"hello-world","descripEon":"helloworldtestapp","version":"0.0.1","private":true,"dependencies":{"express":"3.x"}}

PACKAGE.JSON

Page 51: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

NPM

Page 52: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelNPM

BASIC PKG MANAGEMENT

COMES WITH NODE.JS

Page 53: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelNPM

127,000 300k PACKAGES in

the NPM REPO

Page 54: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

WHAT’s CHANGED?

Page 55: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

$npmls$npminstalllodash-g

NPM

Page 56: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

EXPRESS

Page 57: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelEXPRESS

Basic server-side web framework

lots of other options: sails, KOA, Geddy, etc

Page 58: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelexpress

EVENT-LOOP model

ASYNC, event-driven

super scalable

Page 59: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

$cathello-world/package.json{"name":"hello-world","descripEon":"helloworldtestapp","version":"0.0.1","private":true,"dependencies":{"express":"3.x"}}$npminstall$npmappExpressserverlisteningonport3000

EXPRESS

Page 60: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

NODE.JS

DIFFERENT UNIVERSE THAN WHAT YOU ARE USED TO

Page 61: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelServer-SIDE JS

ASSEMBLE YOUR OWN framework

SMALLER MODULES

Page 62: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelServer-SIDE JS

NO “ONE-WAY” to do things

OVERLAPPING TOOLS

Page 63: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

TOOLS

Page 64: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

SOCKET.IO

Page 65: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelSOCKET.IO

WEBSOCKET

Page 66: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelSOCKET.IO

Persistent connection

NODE handles it well

simple on front& back

Page 67: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

io.emit('announce',{announcement:announcement});

SERVER

Page 68: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

socket.on('announce',funcEon(data){self.data.announcement=data;self.displayNewData();});

BROWSER

Page 69: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelHTTP2 SPEC

WEBSOCKET IS INCLUDED!

Page 70: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelBusiness Logic / API Layer

ARCHITECTURE

Java Ruby PythonData Store

JavaScript

Presentation

Web Mobile Bots

Page 71: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelCLOSING THOUGHTS

NOT FOR EVERY KIND OF APP

ASYNC, EVENT-DRIVEN

still maturing

Page 72: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

Javascript Fatigue

Page 73: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelServer-SIDE JS

can be tied into existing build process

can use existing db & other infra

Page 74: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

References:hTp://gulpjs.com/hTps://github.com/kriasoU/react-starter-kithTp://webpack.github.io/

hTps://twiTer.com/sstephenson/status/730039913052176384

Page 75: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

THANK YOU

Page 76: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

java STACK

Page 77: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

QUICK WALK-THROUGH

Page 78: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

GRUNT

Page 79: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelGRUNT

TASK BASED COMMAND-LINE TOOL

Page 80: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelUSES

JavaSCript linting

Unit test running

minification

Page 81: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

"devDependencies":{"grunt":"~0.4.2","grunt-contrib-jshint":"~0.6.3","grunt-contrib-nodeunit":"~0.2.0","grunt-contrib-uglify":"~0.2.2"}

PACKAGE.JSON

Page 82: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

module.exports=funcEon(grunt){grunt.initConfig({jshint:{all:['Grunbile.js',‘lib/**/*.js','test/**/*.js','public/**/*.js','routes/*.js','routes/**/*.js','app.js']}});grunt.loadNpmTasks('grunt-contrib-jshint');grunt.registerTask('default',['jshint']);};

//TesEngJasmine

GRUNTFILE

Page 83: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

$ gruntRunning "jshint:all" (jshint) taskLinting app.js ...ERROR[L12:C20] W033: Missing semicolon.var app = express()

Warning: Task "jshint:all" failed. Use --force to continue.

Aborted due to warnings.

RUNNING

Page 84: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

TOOLS GALORE

PACKAGING, TESTING, ETC

Page 85: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelTOOLBOX

GULP

WEbpack

SOCKET.IO

Page 86: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

GULP

Page 87: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelGULP

Streaming build tool

Page 88: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelUSES

Plugin based

streaming

successor to grunt (?)

Page 89: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

gulp.task('build',['clean'],funcEon(cb){runSequence(['vendor','assets','styles','bundle'],cb);});

GULPFILE

Page 90: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

gulp.task('assets',funcEon(){src.assets=['src/assets/**','src/content*/**/*.*','src/templates*/**/*.*'];returngulp.src(src.assets).pipe($.changed('build')).pipe(gulp.dest('build')).pipe($.size({Etle:'assets'}));});

GULPFILE

Page 91: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

gulp.task('bundle',funcEon(cb){varstarted=false;varconfig=require('./webpack.config.js');varbundler=webpack(config);…}

GULPFILE

Page 92: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

References:hTp://gulpjs.com/hTps://github.com/kriasoU/react-starter-kit

Page 93: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

WEBPACK

Page 94: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWEBPACK

Module builder

Page 95: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelwebpack

suited for large projects

CODE SPLITTING

STATIC ASSETS

Page 96: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWEBPACK

Page 97: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatelWEBPACK

BROWSER SYNC & LIVE updates

Page 98: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

devServer:{historyApiFallback:true,hot:false,inline:true,progress:false,noInfo:false,proxy:{'/lunches':{target:'hTp://connect-js.com:3000/',secure:false,}}}

LIVE RELOAD

Page 99: MOdern Java(Script) Server Stack · ISOMORPHIC APPS SCALABLE SOLUTIONS. WHY node? @prpatel SOURCE CODE QUALITY BUNDLING / development server-side JS. modules @prpatel express, grunt,

@prpatel

$gulppagespeed[15:48:49]Usinggulpfile~/dev/react/react-starter-kit/gulpfile.js[15:48:49]StarEng‘pagespeed'...

CSSsize|148.13kBHTMLsize|20.84kBImagesize|54.24kBJavaScriptsize|1.72MB

PAGESPEED