TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

23
Forget Grunt & Gulp Webpack & NPM tasks rule them all!

Transcript of TDC2016SP - Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Page 1: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Forget Grunt & GulpWebpack & NPM tasks rule them all!

Page 2: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Who?• Derek Stavis

• So;ware Engineer @ Healfies

• Coding stuff since 2000

• High level stuff

• Low level stuff

• Design stuff

• github.com/derekstavis

• github.com/oh-my-fish

Page 3: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

But before you ask

Page 4: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Gulp Configura:on Filevar app, base, concat, directory, gulp, hostname, path, refresh, sass, uglify, del, connect, autoprefixer, babel;

var autoPrefixBrowserList = ['last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'];

gulp = require('gulp'); gutil = require('gulp-util'); concat = require('gulp-concat'); uglify = require('gulp-uglify'); sass = require('gulp-sass'); connect = require('gulp-connect'); del = require('del'); autoprefixer = require('gulp-autoprefixer'); babel = require('gulp-babel');

gulp.task('connect', function() { connect.server({ root: 'app', livereload: true }); });

gulp.task('images-deploy', function() { gulp.src(['app/images/**/*']) .pipe(gulp.dest('dist/images')); });

gulp.task('scripts', function() { //this is where our dev JS scripts are return gulp.src('app/scripts/src/**/*.js') .pipe(babel({ presets: ['es2015', 'react'] }) .pipe(concat('app.js')) .on('error', gutil.log) .pipe(uglify()) .pipe(gulp.dest('app/scripts')) .pipe(connect.reload()); });

gulp.task('scripts-deploy', function() { return gulp.src('app/scripts/src/**/*.js')

.pipe(concat('app.js')) .pipe(uglify()) .pipe(gulp.dest('dist/scripts')); });

gulp.task('styles', function() { return gulp.src('app/styles/scss/init.scss') .pipe(sass({ errLogToConsole: true, includePaths: [ 'app/styles/scss/' ] })) .pipe(autoprefixer({ browsers: autoPrefixBrowserList, cascade: true })) .on('error', gutil.log) .pipe(concat('styles.css')) .pipe(gulp.dest('app/styles')) .pipe(connect.reload()); });

gulp.task('styles-deploy', function() { return gulp.src('app/styles/scss/init.scss') .pipe(sass({ includePaths: [ 'app/styles/scss', ] })) .pipe(autoprefixer({ browsers: autoPrefixBrowserList, cascade: true })) .pipe(concat('styles.css')) .pipe(gulp.dest('dist/styles')); });

gulp.task('html', function() { return gulp.src('app/*.html') .pipe(connect.reload()) .on('error', gutil.log); });

gulp.task('html-deploy', function() { gulp.src('app/*') .pipe(gulp.dest('dist'));

gulp.src('app/.*') .pipe(gulp.dest('dist'));

gulp.src('app/fonts/**/*') .pipe(gulp.dest('dist/fonts'));

gulp.src(['app/styles/*.css', '!app/styles/styles.css']) .pipe(gulp.dest('dist/styles')); });

gulp.task('clean', function() { del('dist'); });

//this is our master task when you run `gulp` in CLI / Terminal //this is the main watcher to use when in active development // this will: // startup the web server, // start up livereload // compress all scripts and SCSS files gulp.task('default', ['connect', 'scripts', 'styles'], function() { gulp.watch('app/scripts/src/**', ['scripts']); gulp.watch('app/styles/scss/**', ['styles']); gulp.watch('app/*.html', ['html']); });

gulp.task('deploy', ['clean'], function () { gulp.start('scripts-deploy', 'styles-deploy', 'html-deploy', 'images-deploy'); });

Page 5: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

PROBLEM?

Page 6: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

The Proposal: Concern Separa:on

Page 7: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Build Pipeline → WebpackTask Management → NPM

Page 8: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

So…?

Page 9: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Webpack

Page 10: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

What is Webpack?• Module bundler

• Supercharges require

• Anything is require-able

• TransformaQons are based on loaders

• Other tasks can be implemented as plugins

• Outputs assets in single or mulQple files

• Built-in hashing → Easy cache invalidaQons

Page 11: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Webpack Features

Page 12: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

J S X J S ( E S 5 )babel-loader

S C S S C S Spostcss-loader

P N G B A S E 6 4file-loader

B U N D L E . J S

How does Webpack?

Page 13: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

const path = require('path') const CopyPlugin = require('copy-webpack-plugin')

module.exports = { entry: "./index.js", output: { path: path.join(__dirname, 'dist'), filename: "bundle.js" }, module: { loaders: [ { test: /\.css$/, loader: "style!css" }, { test: /\.js$/, loader: "babel" }, { test: /\.(svg|ttf|otf|eot|woff|woff2|png|jpg|gif)$/, loader: "file" } ] }, plugins: [ new CopyPlugin([ { from: 'index.html' } ]), new Uglify([ { from: 'index.html' } ]) ] }

Webpack Configura:on File

Page 14: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

webpack.github.io/docs/tutorials/geOng-started

Page 15: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!
Page 16: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Just use NPM scripts

Page 17: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

What are NPM scripts

Page 18: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

• Custom commands through run-script

• Pre-hooks for custom commands

• Include package binary entry points

• Command composiQon

What are NPM scripts

Page 19: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

npm install -g

Page 20: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

npm run-script

npm run

Page 21: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

IT’S DEMO TIME

BYE GRUNT AND GULP

Page 22: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

hXp://:ny.cc/kill-gg

Page 23: TDC2016SP -  Esqueça Grunt ou Gulp. Webpack and NPM rule them all!

Thanks! Ques:ons?

@derekstavis github.com/derekstavis

linkedin.com/in/derekstavis [email protected]