Workflow twig, bower y gulp

42
Optimiza tu frontend workflow con Twig, Bower y Gulp

Transcript of Workflow twig, bower y gulp

Page 1: Workflow twig, bower y gulp

Optimiza tu frontend workflow con Twig,

Bower y Gulp

Page 2: Workflow twig, bower y gulp

Manel López TorrentIngeniero en informática

Web Developer@mloptor

[email protected]

Jonás TalaveraIngeniero t. en

informáticaWeb Developer

@[email protected]

Page 3: Workflow twig, bower y gulp

Motorde plantillas

Gestor depaquetes

TaskRunner

Page 4: Workflow twig, bower y gulp

Frontend

+

Page 5: Workflow twig, bower y gulp

FrontEnd Optimizado !!!!

Page 6: Workflow twig, bower y gulp

¿Cómo creábamos nuestros sitios html?

Page 7: Workflow twig, bower y gulp

<?php include("header.php"); ?> <p>Hello world! This is HTML5 Boilerplate.</p><?php include("footer.php"); ?>

<!doctype html><html class="no-js" lang=""> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title></title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="apple-touch-icon" href="apple-touch-icon.png"> <!-- Place favicon.ico in the root directory -->

<link rel="stylesheet" href="css/normalize.css"> <link rel="stylesheet" href="css/main.css"> <script src="js/vendor/modernizr-2.8.3.min.js"></script> </head> <body>

<footer> <p>Footer</p> </fotter> </body></html>

index.php

header.php

footer.php

<?php include("header.php"); ?> <p>This is a contact page.</p><?php include("footer.php"); ?>

contact.php

Page 8: Workflow twig, bower y gulp
Page 9: Workflow twig, bower y gulp

Twig

Page 10: Workflow twig, bower y gulp

● Control de flujo

● Escapado automático

● Herencia de plantillas

● Filtros

● i18n support (gettext)

● Macros

● Extensiones

{% extends "base.html" %}{% block navigation %} <ul id="navigation"> {% for item in navigation %} <li> <a href="{{ item.href }}"> {% if 2 == item.level %}

&nbsp;&nbsp; {% endif %} {{ item.caption|upper }} </a> </li> {% endfor %} </ul>{% endblock navigation %}

Twig features

Page 11: Workflow twig, bower y gulp
Page 12: Workflow twig, bower y gulp
Page 13: Workflow twig, bower y gulp
Page 14: Workflow twig, bower y gulp

Twig templates HTML Static site?

Page 15: Workflow twig, bower y gulp

SCULPINSCULPINhttp://sculpin.io

Page 16: Workflow twig, bower y gulp

Twig templates

Markdown files

HTML Static site

HTML files

Page 17: Workflow twig, bower y gulp

$ cd project_folder/

$ curl -O https://download.sculpin.io/sculpin.phar

$ chmod +x sculpin.phar

$ sudo mv sculpin.php /usr/bin/sculpin

$ sculpin install

Instalar Sculping

Page 18: Workflow twig, bower y gulp

app/└── config ├── sculpin_kernel.yml └── sculpin_site.yml

# The contents of this file are parsed and made available as# via `site.*`. So for example, {{ site.title }} can be used# in a template to get the contents of the `title` key.

title: PHPValencia Demosubtitle: Gulp, Bower and Twig

/app/config/sculpin_site.yml

VariablesGlobales

Page 19: Workflow twig, bower y gulp

source/├── _layouts│ └── default.html├── about.md├── css│ └── styles.css├── img│ └── slideshow│ ├── image1.jpg│ ├── image2.jpg│ ├── image3.jpg│ └── image4.jpg├── index.html└── js └── javascript.js

Page 20: Workflow twig, bower y gulp

source/├── _layouts│ └── default.html├── about.md├── css│ └── styles.css├── img│ └── slideshow│ ├── image1.jpg│ ├── image2.jpg│ ├── image3.jpg│ └── image4.jpg├── index.html└── js └── javascript.js

Page 21: Workflow twig, bower y gulp

<!DOCTYPE html><html><head> <meta charset="UTF-8" /> <title>{% block title %}{{ page.title }}{% endblock %}</title> {% block stylesheets %}{% endblock %} <script src="js/javascript.js"></script> <link rel="stylesheet" href="css/styles.css"/></head><body>{% block content_wrapper %}{% block content %}{% endblock %}{% endblock %}{% block javascripts %}{% endblock %}</body></html>

/source/_layouts/default.html

Page 22: Workflow twig, bower y gulp

source/├── _layouts│ └── default.html├── about.md├── css│ └── styles.css├── img│ └── slideshow│ ├── image1.jpg│ ├── image2.jpg│ ├── image3.jpg│ └── image4.jpg├── index.html└── js └── javascript.js

Page 23: Workflow twig, bower y gulp

source/├── _layouts│ └── default.html├── about.md├── css│ └── styles.css├── img│ └── slideshow│ ├── image1.jpg│ ├── image2.jpg│ ├── image3.jpg│ └── image4.jpg├── index.html└── js └── javascript.js

Page 24: Workflow twig, bower y gulp

---layout: defaulttitle: Home---<nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Project name</a> </div>

/index.html

Page 25: Workflow twig, bower y gulp

---layout: defaulttitle: Home---<nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Project name</a> </div>

/index.html BlockContent

Page 26: Workflow twig, bower y gulp

---layout: defaulttitle: Markdown

---

An h1 header============

Paragraphs are separated by a blank line.

2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized listslook like:

* this one * that one * the other one

Note that --- not considering the asterisk --- the actual textcontent starts at 4-columns in.

/about.md

Page 27: Workflow twig, bower y gulp

output_dev/├── about│ └── index.html├── components│ ├── bootstrap│ ├── highlightjs│ ├── jquery│ ├── require-built.js│ ├── require.config.js│ ├── require.css│ └── require.js├── css│ └── styles.css├── img│ └── slideshow├── index.html└── js └── javascript.js

$ sculpin generate --watch --server

http://localhost:8000

Page 28: Workflow twig, bower y gulp

BowerGestor de paquetes para la Web

● > 34700 paquetes disponibles (junio 2015).

● Necesita nodejs & npm y git.

● Versionado semántico (Semver).

● Instalación: $ npm install -g bower

Page 29: Workflow twig, bower y gulp

Semantic versioning● Formato: MAJOR.MINOR.PATCH:

○ MAJOR: cambios que hacen incompatible la API actual.

○ MINOR: nueva funcionalidad que mantiene la

compatibilidad hacia atrás.

○ PATCH: cambios menores, corrección de bugs.

● Se permiten etiquetas como extensiones del formato

MAJOR.MINOR.PATH. Ej.: 1.0.0-alpha, 2.3.0-beta

Page 30: Workflow twig, bower y gulp

● Operadores:

○ <, >, <=, >=, =: operadores de comparación.

■ <2.0.0

■ >=1.8.0

○ hyphen-range: define un conjunto de valores posibles

■ 0.8.0 - 2.0.0 ~= 0.8.0 >= v <= 2.0.0

○ X-range: x, * para modificar uno de los valores de x.y.z

■ * ~= v >= 0.0.0

■ 1.5.x = 1.5.* ~= 1.5.0 <= v < 1.6.0

■ 1.x = 1.x.x ~= 1.0.0 <= v < 2.0.0

Page 31: Workflow twig, bower y gulp

● Operadores:

○ ~ (tilde): permite cambios en el valor menor de x.y.z

especificado.

■ ~1.2.3 ~= 1.2.3 <= v < 1.3 (igual a 1.2.x)

■ ~1 ~= 1.0.0 <= v < 2.0.0 (igual a 1.x.x)

○ ^ (caret): permite cambios en el primer valor de versión

desde la izquierda distinto de cero

■ ^1.2.3 ~= 1.2.3 <= v < 2.0.0

■ ^0.2.3 ~= 0.2.3 <= v < 0.3.0

■ ^0.0.3 ~= 0.0.3 <= v < 0.0.4

Page 32: Workflow twig, bower y gulp

● Bower API:

○ $ bower init: crea un fichero bower.json de forma

interactiva.

○ $ bower install [--save] <name#version>: instala un

nuevo paquete.

○ $ bower list: lista los paquetes instalados y posibles

actualizaciones.

○ $ bower update [<name>]: actualiza paquetes

instalados o uno específico.

○ $ bower info <name>: muestra info sobre un paquete.

○ $ bower search <name>: busca paquetes.

Page 33: Workflow twig, bower y gulp

● bower.json:

Page 34: Workflow twig, bower y gulp

GulpAutomatiza tareas comunes

● Basado en streams & pipes.

● Funcionalidad mediante plugins.

● Maximiza la ejecución de tareas

en paralelo.

● Fácil de usar y de aprender.

Page 35: Workflow twig, bower y gulp

Gulp vs Grunt

● Código vs configuración.

● Plugins vs tareas predefinidas.

● Streams vs ficheros temporales.

● ~ 1500 plugins vs ~ 4400 plugins

Page 36: Workflow twig, bower y gulp

● Gulp API:

○ gulp.src(globs[, options]): devuelve un stream de

lectura que se puede dirigir a un plugin.

Page 37: Workflow twig, bower y gulp

● Gulp API:

○ gulp.dest(path[, options]): escribe un flujo de datos en

disco.

Page 38: Workflow twig, bower y gulp

● Gulp API:

○ gulp.task(name[, deps], fn): define una tarea.

Page 39: Workflow twig, bower y gulp

● Gulp API:

○ gulp.watch(glob[, options], tasks): observa un

conjunto de ficheros y se ejecutan tareas cuando

cambian.

Page 40: Workflow twig, bower y gulp
Page 41: Workflow twig, bower y gulp

Demo

Page 42: Workflow twig, bower y gulp

Gracias por asistir!!!

Esperamos que os haya gustado :D