SlideShare a Scribd company logo
1 of 48
Download to read offline
Automatizacija
u Front-end razvojnom procesu
@dalibor_gogic
Node.js
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/
Node Package Manager
https://www.npmjs.com/
$ npm -v
3.5.2
npm je zvanicni centralni repozitorijum node modula kao i softver za upravljanje
bibilotekama (modulima) od kojih vasa aplikacija zavisi (dependencies).
$ 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/
Version Control
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 --version
Git version 2.7.4
$ git init
Initialized empty Git repository in /foo/.git/
$ touch foo.txt
$ git status
On 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 master
nothing to commit, working directory clean
$ git config --global user.name "Dalibor Gogic"
$ git config --global user.email mail@daliborgogic.com
Dokumentacija
https://git-scm.com/doc
tryGit
https://try.github.io
Syntactically Awesome Style Sheets
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.
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/
Instalacija
1. Aplikacije
2. 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 -v
Sass 3.4.22 (Selective Steve)
$ sass --watch app/sass:public/stylesheets
// SCSS
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
// CSS
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
Variable
// SCSS
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
// CSS
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
Nesting
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
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
// _reset.scss
html,
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.css
html, body, ul, ol {
margin: 0;
padding: 0;
}
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
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;
}
Ovo je jedna od najkorisnijih odlika Sass-a.
@extend nam omogucava da delimo set css osobina iz jednog selektora u drugi.
Extend
// 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;
}
+, -, *, / 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%;
}
Autoprefixer
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
Flexbox, Filters …
.foo {
display: flex;
}
// kompajlira u
.foo {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
Autoprefixer takodje uklanja zastarele prefikse
Source Maps
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.
// main.scss
@include "variable"
@include "base"
// _variable.scss
$brand-color: #f2f2f2;
// _base.scss
body {
background-color: $brand-color;
}
// main.css
body{background-color: #89ABE3;}
/*# sourceMappingURL=data:application/json;base64,
eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9iYXNlLnNjc3MiLCJfdmFyaWFi
bGUuc2NzcyJdLCJuYW1...= */
Streaming build system
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/
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
// gulpfile.js
'use strict'
var gulp = require('gulp')
gulp.task('default')
Pokretanje
$ gulp
Default zadatak ce se pokrenuti
i nece uraditi nista.
http://gulpjs.com/plugins/
Search 2429 plugins..
Plugins
https://www.npmjs.com/package/gulp-sass/
gulp-sass
$ npm i -D gulp-sass
// 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
A package manager for the web
Instalacija
http://bower.io/
$ npm i bower -g
$ bower -v
1.7.9
$ bower init
# 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/
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
Web Startit Kit
SSH
$ git clone git@github.com:daliborgogic/web-startit-kit.git
HTTPS
$ git clone https://github.com/daliborgogic/web-startit-kit.git
DOWNLOAD
https://github.com/daliborgogic/web-startit-kit/archive/master.zip
web-startit-kit
|-- .git
|-- app
|-- img
|-- js
|-- css
|-- favicon.ico
|-- index.html
|-- .bowerrc
|-- .editorconfig
|-- .gitignore
|-- README.md
|-- bower.json
|-- gulpfile.js
|-- package.json
// 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
Web Startit Kit
https://github.com/daliborgogic/web-startit-kit
Gulp ✓
Bower ✓
Sass ✓
Autoprefixer ✓
Source Maps ✓
HTTP Server ✓
Browsersync ✓
Hvala na paznji

More Related Content

Similar to Automatizacija u Front-end razvojnom procesu

Dobra praksa u razvoju komponentne biblioteke
Dobra praksa u razvoju komponentne bibliotekeDobra praksa u razvoju komponentne biblioteke
Dobra praksa u razvoju komponentne bibliotekeGoran Rakic
 
Napredne tehnike razvoja web aplikacija - Zend Framework
Napredne tehnike razvoja web aplikacija - Zend FrameworkNapredne tehnike razvoja web aplikacija - Zend Framework
Napredne tehnike razvoja web aplikacija - Zend FrameworkSaša Stamenković
 
Getting bigger with flask
Getting bigger with flaskGetting bigger with flask
Getting bigger with flaskJosipKatalinic
 
HTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rs
HTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rsHTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rs
HTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rsMilovan Jovičić
 
Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPress
 Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPress Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPress
Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPressDamir Bodor
 
WordPress za početnike
WordPress za početnikeWordPress za početnike
WordPress za početnikeDejanVesic
 
HTML skripta.pdf
HTML skripta.pdfHTML skripta.pdf
HTML skripta.pdfDaVu2
 
Profesionalizacija veb-sajtova polaznika i izmena šablona naslovne strane
Profesionalizacija veb-sajtova polaznika i izmena šablona naslovne straneProfesionalizacija veb-sajtova polaznika i izmena šablona naslovne strane
Profesionalizacija veb-sajtova polaznika i izmena šablona naslovne straneAleksandar Urošević
 
Sibin Grasić - Najčešće greške WP developera
Sibin Grasić - Najčešće greške WP developeraSibin Grasić - Najčešće greške WP developera
Sibin Grasić - Najčešće greške WP developeraStartit
 
Admnistriranje mreza nova_predavanja_1
Admnistriranje mreza nova_predavanja_1Admnistriranje mreza nova_predavanja_1
Admnistriranje mreza nova_predavanja_1naroz
 
Wordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuWordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuMilan Stošić
 
Klijent Server Sistemi - Ljubomir Lazic
Klijent Server Sistemi - Ljubomir LazicKlijent Server Sistemi - Ljubomir Lazic
Klijent Server Sistemi - Ljubomir LazicZeki Zeki
 
Ajax -it_tehnologije
Ajax  -it_tehnologijeAjax  -it_tehnologije
Ajax -it_tehnologijemarkodenic
 

Similar to Automatizacija u Front-end razvojnom procesu (20)

Dobra praksa u razvoju komponentne biblioteke
Dobra praksa u razvoju komponentne bibliotekeDobra praksa u razvoju komponentne biblioteke
Dobra praksa u razvoju komponentne biblioteke
 
Napredne tehnike razvoja web aplikacija - Zend Framework
Napredne tehnike razvoja web aplikacija - Zend FrameworkNapredne tehnike razvoja web aplikacija - Zend Framework
Napredne tehnike razvoja web aplikacija - Zend Framework
 
Matlab web portal
Matlab web portalMatlab web portal
Matlab web portal
 
Getting bigger with flask
Getting bigger with flaskGetting bigger with flask
Getting bigger with flask
 
Migration to 9i
Migration to 9iMigration to 9i
Migration to 9i
 
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
 
HTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rs
HTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rsHTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rs
HTML, CSS i Javascript Web tehnologije - 3. predavanje - Startit.rs
 
Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPress
 Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPress Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPress
Nikola Petrov-Bezbednost WordPress sajtova - Uvod u WordPress
 
Tag
TagTag
Tag
 
Firebase
FirebaseFirebase
Firebase
 
WordPress za početnike
WordPress za početnikeWordPress za početnike
WordPress za početnike
 
Decouple Goals
Decouple GoalsDecouple Goals
Decouple Goals
 
HTML skripta.pdf
HTML skripta.pdfHTML skripta.pdf
HTML skripta.pdf
 
Profesionalizacija veb-sajtova polaznika i izmena šablona naslovne strane
Profesionalizacija veb-sajtova polaznika i izmena šablona naslovne straneProfesionalizacija veb-sajtova polaznika i izmena šablona naslovne strane
Profesionalizacija veb-sajtova polaznika i izmena šablona naslovne strane
 
Sibin Grasić - Najčešće greške WP developera
Sibin Grasić - Najčešće greške WP developeraSibin Grasić - Najčešće greške WP developera
Sibin Grasić - Najčešće greške WP developera
 
Uvod u react
Uvod u reactUvod u react
Uvod u react
 
Admnistriranje mreza nova_predavanja_1
Admnistriranje mreza nova_predavanja_1Admnistriranje mreza nova_predavanja_1
Admnistriranje mreza nova_predavanja_1
 
Wordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuWordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webu
 
Klijent Server Sistemi - Ljubomir Lazic
Klijent Server Sistemi - Ljubomir LazicKlijent Server Sistemi - Ljubomir Lazic
Klijent Server Sistemi - Ljubomir Lazic
 
Ajax -it_tehnologije
Ajax  -it_tehnologijeAjax  -it_tehnologije
Ajax -it_tehnologije
 

Recently uploaded

Profesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola HipokratProfesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola HipokratNerkoJVG
 
Razvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog detetaRazvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog detetaNerkoJVG
 
Istorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdfIstorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdfpauknatasa
 
Istorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdfIstorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdfpauknatasa
 
Птице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у БеоградуПтице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у БеоградуИвана Ћуковић
 
Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024pauknatasa
 
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.docIstorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.docpauknatasa
 
Istorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdfIstorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdfpauknatasa
 
Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022pauknatasa
 
Istorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdfIstorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdfpauknatasa
 
Istorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdfIstorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdfpauknatasa
 

Recently uploaded (14)

Profesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola HipokratProfesionalna_orijentacija / Srednja Škola Hipokrat
Profesionalna_orijentacija / Srednja Škola Hipokrat
 
Razvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog detetaRazvoj samopouzdanja kod skolskog deteta
Razvoj samopouzdanja kod skolskog deteta
 
Istorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdfIstorija 6. razred okruzno takmicenje 2023 test.pdf
Istorija 6. razred okruzno takmicenje 2023 test.pdf
 
Istorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdfIstorija okruzno takmicenje za 6. razred 2022. godine.pdf
Istorija okruzno takmicenje za 6. razred 2022. godine.pdf
 
Птице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у БеоградуПтице које можемо да пронађемо у Београду
Птице које можемо да пронађемо у Београду
 
Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024Istorija ključ za okruzno takmicenje za 6. razred_2024
Istorija ključ za okruzno takmicenje za 6. razred_2024
 
OIR12-L1.pptx
OIR12-L1.pptxOIR12-L1.pptx
OIR12-L1.pptx
 
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.docIstorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
Istorija kljuc za okruzno takmicenje za 7. razred 2022. godine.doc
 
OIR12-L2.pptx
OIR12-L2.pptxOIR12-L2.pptx
OIR12-L2.pptx
 
Istorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdfIstorija opstinsko takmicenje za 6. razred - test_2024.pdf
Istorija opstinsko takmicenje za 6. razred - test_2024.pdf
 
Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022Istorija kljuc za okruzno takmicenje za 6. razred 2022
Istorija kljuc za okruzno takmicenje za 6. razred 2022
 
Istorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdfIstorija 6. razred opstinsko takmicenje 2022.pdf
Istorija 6. razred opstinsko takmicenje 2022.pdf
 
Istorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdfIstorija okruzno takmicenje za 6. razred_20242024.pdf
Istorija okruzno takmicenje za 6. razred_20242024.pdf
 
OIR-V10.pptx
OIR-V10.pptxOIR-V10.pptx
OIR-V10.pptx
 

Automatizacija u Front-end razvojnom procesu

  • 1. Automatizacija u Front-end razvojnom procesu @dalibor_gogic
  • 3. 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/
  • 5. https://www.npmjs.com/ $ npm -v 3.5.2 npm je zvanicni centralni repozitorijum node modula kao i softver za upravljanje bibilotekama (modulima) od kojih vasa aplikacija zavisi (dependencies).
  • 6. $ 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/
  • 8. 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 --version Git version 2.7.4
  • 9. $ git init Initialized empty Git repository in /foo/.git/ $ touch foo.txt $ git status On 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 master nothing to commit, working directory clean $ git config --global user.name "Dalibor Gogic" $ git config --global user.email mail@daliborgogic.com
  • 12. 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.
  • 13. 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/
  • 14. Instalacija 1. Aplikacije 2. 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 -v Sass 3.4.22 (Selective Steve) $ sass --watch app/sass:public/stylesheets
  • 15. // SCSS $font-stack: Helvetica, sans-serif; $primary-color: #333; body { font: 100% $font-stack; color: $primary-color; } // CSS body { font: 100% Helvetica, sans-serif; color: #333; } Variable
  • 16. // SCSS nav { ul { margin: 0; padding: 0; list-style: none; } li { display: inline-block; } a { display: block; padding: 6px 12px; text-decoration: none; } } // CSS nav ul { margin: 0; padding: 0; list-style: none; } nav li { display: inline-block; } nav a { display: block; padding: 6px 12px; text-decoration: none; } Nesting
  • 17. 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
  • 18. 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
  • 19. // _reset.scss html, 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.css html, body, ul, ol { margin: 0; padding: 0; } body { font: 100% Helvetica, sans-serif; background-color: #efefef; }
  • 20. 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; }
  • 21. Ovo je jedna od najkorisnijih odlika Sass-a. @extend nam omogucava da delimo set css osobina iz jednog selektora u drugi. Extend
  • 22. // 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; }
  • 23. +, -, *, / 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%; }
  • 25. 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
  • 26. Flexbox, Filters … .foo { display: flex; } // kompajlira u .foo { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } Autoprefixer takodje uklanja zastarele prefikse
  • 28. 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.
  • 29. // main.scss @include "variable" @include "base" // _variable.scss $brand-color: #f2f2f2; // _base.scss body { background-color: $brand-color; } // main.css body{background-color: #89ABE3;} /*# sourceMappingURL=data:application/json;base64, eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9iYXNlLnNjc3MiLCJfdmFyaWFi bGUuc2NzcyJdLCJuYW1...= */
  • 31. 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/
  • 32. 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
  • 33. // gulpfile.js 'use strict' var gulp = require('gulp') gulp.task('default') Pokretanje $ gulp Default zadatak ce se pokrenuti i nece uraditi nista.
  • 36. // 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
  • 37. A package manager for the web
  • 38. Instalacija http://bower.io/ $ npm i bower -g $ bower -v 1.7.9 $ bower init
  • 39. # 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/
  • 40. 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
  • 42.
  • 43. SSH $ git clone git@github.com:daliborgogic/web-startit-kit.git HTTPS $ git clone https://github.com/daliborgogic/web-startit-kit.git DOWNLOAD https://github.com/daliborgogic/web-startit-kit/archive/master.zip
  • 44. web-startit-kit |-- .git |-- app |-- img |-- js |-- css |-- favicon.ico |-- index.html |-- .bowerrc |-- .editorconfig |-- .gitignore |-- README.md |-- bower.json |-- gulpfile.js |-- package.json
  • 45. // 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
  • 46.
  • 47. Web Startit Kit https://github.com/daliborgogic/web-startit-kit Gulp ✓ Bower ✓ Sass ✓ Autoprefixer ✓ Source Maps ✓ HTTP Server ✓ Browsersync ✓