automatizacija u front-end razvojnom procesu

48
Automatizacija u Front-end razvojnom procesu @dalibor_gogic

Upload: dalibor-gogic

Post on 17-Jan-2017

352 views

Category:

Education


5 download

TRANSCRIPT

Page 1: Automatizacija u Front-end razvojnom procesu

Automatizacija u Front-end razvojnom procesu

@dalibor_gogic

Page 2: Automatizacija u Front-end razvojnom procesu

Node.js

Page 3: Automatizacija u Front-end razvojnom procesu

Node.js je platforma za izgradnju brzih i skalabilnih aplikacija izgradjena na osnovi

V8 JavaScript engine.

$ node -v

v4.4.5

https://nodejs.org/en/

Page 4: Automatizacija u Front-end razvojnom procesu

Node Package Manager

Page 5: Automatizacija u Front-end razvojnom procesu

https://www.npmjs.com/

$ npm -v3.5.2

npm je zvanicni centralni repozitorijum node modula kao i softver za upravljanje bibilotekama (modulima) od kojih vasa aplikacija zavisi (dependencies).

Page 6: Automatizacija u Front-end razvojnom procesu

$ npm init -y

// package.json{ "name": "web-startit-kit", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC"}

$ npm help json

https://docs.npmjs.com/

Page 7: Automatizacija u Front-end razvojnom procesu

Version Control

Page 8: Automatizacija u Front-end razvojnom procesu

Sistem kontrole verzija dizajniran tako da cuva i nadgleda na podatke kao da su skup snimaka (snapshots) minijaturnog sistema od malih do veoma velikih projekata sa brzo i efikasno.

https://git-scm.com/

$ git --versionGit version 2.7.4

Page 9: Automatizacija u Front-end razvojnom procesu

$ git initInitialized empty Git repository in /foo/.git/$ touch foo.txt$ git statusOn branch master

Initial commit

Untracked files: (use "git add <file>..." to include in what will be committed)

foo.txt

nothing added to commit but untracked files present (use "git add" to track)

$ git add foo.txt$ git commit -m "short description"$ git status

On branch masternothing to commit, working directory clean

$ git config --global user.name "Dalibor Gogic"$ git config --global user.email [email protected]

Page 10: Automatizacija u Front-end razvojnom procesu

Dokumentacijahttps://git-scm.com/doc

tryGithttps://try.github.io

Page 11: Automatizacija u Front-end razvojnom procesu

Syntactically Awesome Style Sheets

Page 12: Automatizacija u Front-end razvojnom procesu

Olaksava upravljanje kompleksnim CSS fajlovima. Postize se upotrebom preprocesora [programa koji se izvrsavaju lokalno ili na serveru] i koji prevode Sass u CSS koji pretrazivaci razumeju.

Za razliku od regularnog CSS, Sass je pravi skriptni jezik sa izrazima, funkcijama, varijablama, uslovnom logikom i petljama.

Page 13: Automatizacija u Front-end razvojnom procesu

Sass je CSS preprocesor – sloj izmedju stilova kojima upravljate i CSS fajlova koje prosledjujete serveru. Sass popunjava rupe u CSS-u kao jeziku, dozvoljavajuci vam da pisete kod koji ce biti brzi, efikasniji i laksi za odrzavanje.

Sass omogucava da dodate funkcionalnosti CSS-u, i prevodi [kompajlira] u CSS fajlove preko razlicitih programa ili web framework plugin-a.

http://sass-lang.com/

Page 14: Automatizacija u Front-end razvojnom procesu

Instalacija1. Aplikacije2. Command Line

Pre nego sto pocnemo da koristimo Sass potrebno je da instalira Ruby. http://rubyinstaller.org/

http://sass-lang.com/install

$ gem install sass

$ sass -vSass 3.4.22 (Selective Steve)

$ sass --watch app/sass:public/stylesheets

Page 15: Automatizacija u Front-end razvojnom procesu

// SCSS$font-stack: Helvetica, sans-serif;$primary-color: #333;

body { font: 100% $font-stack; color: $primary-color;}

// CSSbody { font: 100% Helvetica, sans-serif; color: #333;}

Variable

Page 16: Automatizacija u Front-end razvojnom procesu

// SCSSnav { ul { margin: 0; padding: 0; list-style: none; }

li { display: inline-block; }

a { display: block; padding: 6px 12px; text-decoration: none; }}

// CSSnav ul { margin: 0; padding: 0; list-style: none;}

nav li { display: inline-block;}

nav a { display: block; padding: 6px 12px; text-decoration: none;}

Nesting

Page 17: Automatizacija u Front-end razvojnom procesu

Omogucava kreiranje delimicnih Sass datoteka koje sadrze male delove CSS i koje je moguce uneti u druge Sass fajlove.

Ovo je odlican nacin za modularizovanje CSS-a i pomaze prilikom razvoja.

Partials je fajl sa ekstenzijom scss i imenom koji sadrzi prefix _

_partial.scss

_ oznacava da je fajl samo delimican i da ne bi trebalo da se generise u css.

Partials

Page 18: Automatizacija u Front-end razvojnom procesu

CSS ima opciju za uvoz koji nam omogucava da podelimo CSS u manje delova.Jedina mana je sto svaki put kada koristimo @import u CSS to stvara jos jedan HTTP zahtev.

Sass @import se nalazi na pocetku ali umesto da trazi HTTP zahtev, Sass ce preuzeti scss fajl koji zelimo da uvezemo i spaja u jedan css.

Import

Page 19: Automatizacija u Front-end razvojnom procesu

// _reset.scsshtml,body,ul,ol { margin: 0; padding: 0;}

// base.scss@import 'reset';

body { font: 100% Helvetica, sans-serif; background-color: #efefef;}

Npr imamo Sass fajlove, _reset.scss i base.scss i zelimo da uvezemo reset.scss u base.scss

// base.csshtml, body, ul, ol { margin: 0; padding: 0;}

body { font: 100% Helvetica, sans-serif; background-color: #efefef;}

Page 20: Automatizacija u Front-end razvojnom procesu

Pojedine stvari u css-u su malo dosadne da se pisu, posebno u css verziji 3 i mnogim vendor prefixima koje postoje. Mixins nam omogucava da napravimo grupe deklaracija css-a koje zelimo da koristimo.

Mozemo proci i kroz vrednosti kako bi mixin bio fleksibilniji.

Mixins

// scss@mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; border-radius: $radius;}

.box { @include border-radius(10px); }

// css.box { -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; border-radius: 10px;}

Page 21: Automatizacija u Front-end razvojnom procesu

Ovo je jedna od najkorisnijih odlika Sass-a. @extend nam omogucava da delimo set css osobina iz jednog selektora u drugi.

Extend

Page 22: Automatizacija u Front-end razvojnom procesu

// scss.message { border: 1px solid #ccc; padding: 10px; color: #333;}

.success { @extend .message; border-color: green;}

.error { @extend .message; border-color: red;}

.warning { @extend .message; border-color: yellow;}

// css.message, .success, .error, .warning { border: 1px solid #cccccc; padding: 10px; color: #333;}

.success { border-color: green;}

.error { border-color: red;}

.warning { border-color: yellow;}

Page 23: Automatizacija u Front-end razvojnom procesu

+, -, *, / i %

Operators

// scss.container { width: 100%; }

article[role="main"] { float: left; width: 600px / 960px * 100%;}

aside[role="complementary"] { float: right; width: 300px / 960px * 100%;}

// css.container { width: 100%;}

article[role="main"] { float: left; width: 62.5%;}

aside[role="complementary"] { float: right; width: 31.25%;}

Page 24: Automatizacija u Front-end razvojnom procesu

Autoprefixer

Page 25: Automatizacija u Front-end razvojnom procesu

PostCSS dodatak da analizira CSS i dodaje vendor prefikse koristeci podatke sa Can I Use

http://caniuse.com/

Rad sa Autoprefixer je jednostavan, zaboravite na vendor prefixe i pisite normalno CSS prema najnovijim WC3 specifikacijama.

Autoprefixer podrzava selektore kao sto su :fullscreen , ::selection, calc(), @supports, @keyframes.

Autoprefixer je postprocessor i mozete ga koristiti sa preprocessors kao sto su Sass, Stylus ili Less

https://github.com/postcss/autoprefixer

Page 26: Automatizacija u Front-end razvojnom procesu

Flexbox, Filters …

.foo { display: flex;}

// kompajlira u.foo { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex}

Autoprefixer takodje uklanja zastarele prefikse

Page 27: Automatizacija u Front-end razvojnom procesu

Source Maps

Page 28: Automatizacija u Front-end razvojnom procesu

Source Maps obezbedjuju nacin mapiranja kod-a u kompresovanom fajlu nazad u prvobitnu poziciju izvorne datoteke.

Uz malu pomoc softvera mozemo lako debagovati aplikacije.

Brauzeri Chrome i Firefox u sebi vec imaju implementiranu podrsku za Source Maps.

Page 29: Automatizacija u Front-end razvojnom procesu

// main.scss@include "variable"@include "base"

// _variable.scss$brand-color: #f2f2f2;

// _base.scssbody { background-color: $brand-color;}

// main.cssbody{background-color: #89ABE3;}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9iYXNlLnNjc3MiLCJfdmFyaWFibGUuc2NzcyJdLCJuYW1...= */

Page 30: Automatizacija u Front-end razvojnom procesu

Streaming build system

Page 31: Automatizacija u Front-end razvojnom procesu

Gulp sluzi za automatizaciju procesa. Omogucava nam da se usresredimo na pisanje kod-a. Automatizacija procesa poput minifikacije javaskripta, optimizacije slika, unit testova moze ustedeti dosta vremena.

Za svoj rad koristi strimove [streams]. Oni sluze da obrade podatke i proslede rezultat za dalju obradu.

http://gulpjs.com/

Page 32: Automatizacija u Front-end razvojnom procesu

Instalacija gulp globalno

Ako ste prethodno instalirali verziju gulp globalno, potrebno je proveriti da li se prethodna verzija ne podudara sa gulp-cli

$ npm rm -g gulp

$ npm install -g gulp-cli

$ gulp -v

CLI version 1.2.1

Page 33: Automatizacija u Front-end razvojnom procesu

// gulpfile.js

'use strict'

var gulp = require('gulp')

gulp.task('default')

Pokretanje$ gulp

Default zadatak ce se pokrenuti i nece uraditi nista.

Page 34: Automatizacija u Front-end razvojnom procesu

http://gulpjs.com/plugins/

Search 2429 plugins..

Plugins

Page 35: Automatizacija u Front-end razvojnom procesu

https://www.npmjs.com/package/gulp-sass/

gulp-sass

$ npm i -D gulp-sass

Page 36: Automatizacija u Front-end razvojnom procesu

// gulpfile.js

'use strict'

var gulp = require('gulp')

gulp.task('default')

// gulpfile.js

'use strict'

var gulp = require('gulp')

var sass = require('gulp-sass')

gulp.task('sass', function () {

return gulp.src('./sass/**/*.scss')

.pipe(sass().on('error', sass.logError))

.pipe(gulp.dest('./css'))

})

gulp.task('sass:watch', function () {

gulp.watch('./sass/**/*.scss', ['sass'])

})

$ gulp sass:watch

Page 37: Automatizacija u Front-end razvojnom procesu

A package manager for the web

Page 38: Automatizacija u Front-end razvojnom procesu

Instalacija

http://bower.io/

$ npm i bower -g

$ bower -v

1.7.9

$ bower init

Page 39: Automatizacija u Front-end razvojnom procesu

# instalira listu paketa iz bower.json

$ bower i

# registrovan paket

$ bower i <package>

# GitHub shorthand

$ bower i daliborgogic/foo

# Git endpoint

$ bower i git://github.com/daliborgogic/foo.git

# URL

$ bower i https://daliborgogic.com/script.js

Bower instalira pakete u folder bower_components/

Page 40: Automatizacija u Front-end razvojnom procesu

Pretraga paketa

http://bower.io/search/

$ bower search <package>

$ bower search jquery

Search results:

jQuery https://github.com/jquery/jquery.git

jquery https://github.com/jquery/jquery-dist.git

...

$ bower i https://github.com/jquery/jquery-dist.git -D

Page 41: Automatizacija u Front-end razvojnom procesu

Web Startit Kit

Page 42: Automatizacija u Front-end razvojnom procesu
Page 43: Automatizacija u Front-end razvojnom procesu

SSH$ git clone [email protected]:daliborgogic/web-startit-kit.git

HTTPS$ git clone https://github.com/daliborgogic/web-startit-kit.git

DOWNLOADhttps://github.com/daliborgogic/web-startit-kit/archive/master.zip

Page 44: Automatizacija u Front-end razvojnom procesu

web-startit-kit |-- .git |-- app |-- img |-- js |-- css |-- favicon.ico |-- index.html |-- .bowerrc |-- .editorconfig |-- .gitignore |-- README.md |-- bower.json |-- gulpfile.js |-- package.json

Page 45: Automatizacija u Front-end razvojnom procesu

// package.json

...

"scripts": {

"init": "npm i && bower i && gulp",

"start": "gulp",

"test": "echo \"Error: no test specified\" && exit 1"

}

...

Inicijalno$ npm run init

Development$ npm run start

Page 46: Automatizacija u Front-end razvojnom procesu
Page 47: Automatizacija u Front-end razvojnom procesu

Web Startit Kithttps://github.com/daliborgogic/web-startit-kit

Gulp ✓Bower ✓Sass ✓Autoprefixer ✓Source Maps ✓HTTP Server ✓Browsersync ✓

Page 48: Automatizacija u Front-end razvojnom procesu

Hvala na paznji