SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
Gulp
Gestión de assets en Symfony
PHPSevilla
28 Septiembre 2016 Juan Luis García Borrego
Patrocinadores
Sobre mí
Desarrollador Symfony en Innn
Juan Luis García Borrego
@JuanluGarciaB
juanluisgarciaborrego.com
ÍNDICE
Flujo de
trabajo
Assets en
Symfony
NPM Gulp
Ejemplo práctico
Flujo de
trabajo
Assets en
Symfony
NPM Gulp
Ejemplo práctico
Flujo de
trabajo
Assets en
Symfony
NPM Gulp
Ejemplo práctico
Flujo de
trabajo
Assets en
Symfony
NPM Gulp
Ejemplo práctico
Flujo de
trabajo
Assets en
Symfony
NPM Gulp
Ejemplo práctico
Flujo de trabajo
El flujo de trabajo de un desarrollador se ha convertido en
una tarea un poco “compleja”.
Para una aplicación sencilla como mínimo en el frontend
usamos algún framework css (Bootstrap, Materialize, PureCss, Foundation,
otros.), un preprocesador css (Sass, LEES, otros), alguna librería
JavaScript (jQuery, Angular, React, Vue, infinitas)
Además, necesito gestionar las versiones, unir todos los
css/js en un archivo y minificarlo para que mi web cargue
más rápido y lo que surja….
Flujo de trabajo
¿MANUALMENTE?
Al igual que Composer nos facilita la vida
gestionando nuestros vendors
Existen numerosas herramientas y automatizadores
de tareas FrontEnd que nos facilitan nuestro día a
día
Grunt, Bower, Gulp, WebPack
Flujo de trabajo
NPM
NPM
Introducción
Gestor de paquetes FrontEnd y BackEnd [NodeJS]
Busca, gestiona y reutiliza librerías de otros
programadores
Viene incluido al instalar Node JS
NPM
Node Package Manager
Gestor de paquetes FrontEnd y BackEnd [NodeJS]
Busca, gestiona y reutiliza librerías de otros
programadores
Viene incluido al instalar Node JS
Misma funcionalidad que Composer en PHP
NPM
Node Package Manager
BACKENDFRONTEND
NPM
package.json
En este archivo queda reflejado toda la configuración
de un “proyecto node” (nombre, autor, licencia,
versión, dependencias, etc.)
En nuestro caso informa de las dependencias node
utilizadas.
El archivo package.json estará alojado en el
directorio raíz del proyecto
NPM
package.json
BACKENDFRONTEND
package.json composer.json
NPM
Guía rápida de uso
$ npm init
NPM
Inicializar proyecto
Nos pedirá datos de nuestro proyecto y generará
el archivo package.json
{
“name”:”ejemplo“,
"version": "1.0.0",
"description": "Descripción del proyecto",
"dependencies": {
},
"devDependencies": {
},
"keywords": [
"phpsevilla",
"gulp"
],
"author": "Juan Luis García Borrego",
"license": "MIT"
}
package.json
$ npm install —save-dev NOMBRE
NPM
Añadir dependencias
Instala el paquete NOMBRE (guarda los archivos en el
directorio node_modules) y añade la librería al archivo
package.json en el apartado de dependencias de
desarrollo.
"devDependencies": {
},
$ npm remove —save-dev NOMBRE
NPM
Eliminar dependencias
Elimina el paquete NOMBRE (node_modules/) y
borra la librería al archivo package.json en el
apartado de dependencias de desarrollo.
"devDependencies": {
},
$ npm outdated
NPM
Chequea si existe nuevas versiones
Para instalar la nueva versión:
$npm install gulp@3.9.1 —save-dev
Package Current Wanted Latest Location
gulp 2.7.0 2.7.0 3.9.1 php-sevilla-gulp
Gulp
Gulp
Introducción
Una herramienta que nos permite automatizar
tareas comunes de desarrollo a través del
terminal y gracias su gran cantidad de plugins
nos permiten realizar multitud de tareas como:
• Unir y mitificar archivos CSS / JavaScript
• Procesa los archivos CSS, que utilicen preprocesadores como Sass, Less
u otros.
• Reduce el tamaño de las imágenes
• http://gulpjs.com/plugins/
Gulp
Introducción
Gulp
Instalación
Instalación global
$ sudo npm install —global gulp
Instalación como dependencia
$ npm install —save-dev gulp
Gulp
Instalación
Gulp
gulpfile.js
En este archivo vamos a indicar cada una de las
task a realizar.
El archivo gulpfile.js se tiene que crear en el
directorio raíz del proyecto.
Gulp
gulpfile.js
var gulp = require('gulp');
gulp.task('default', function(){
console.log("Hola PHP Sevilla");
});
gulpfile.js
var gulp = require('gulp');
gulp.task('default', function(){
console.log("Hola PHP Sevilla");
});
gulpfile.js
➜ phpsevilla gulp
[19:23:05] Using gulpfile ~/Sites/lab/phpsevilla/gulpfile.js
[19:23:05] Starting 'default'...
Hola PHP Sevilla
[19:23:05] Finished 'default' after 92 μs
➜ phpsevilla
gulpfile.js
Gulp
Sintaxis
En el archivo de configuración gulpfile.js tenemos
que definir todos los plugins utilizados, incluido
gulp.
var NombrePlugin1 = require(‘nombrePlugin1’);
var NombrePluginN = require(‘nombrePluginN’);
Gulp
var gulp = require(‘gulp’);
Las tareas se definen llamando al método .task().
Como primer parámetro se le pasa el nombre de la
tarea, y como se fundo se define una función anónima
que contendrá la lógica del mismo.
gulp.task(‘nombreTarea’, function() {
//tarea
});
Gulp
gulp.task()
Por defecto, gulp tiene una tarea definida llama
default.
Al ejecutar en la terminal el comando gulp es la tarea
que se ejecuta.
gulp.task('default', ['styles', 'fonts', 'images', ‘scripts’]);
Al ejecutar el comando gulp: Se ejecuta la tarea
default, que llama a las tareas incluidas en el array
Gulp
gulp.task()
El método src() es el encargado de especificar la
localización de los ficheros/assets existentes.
gulp.src(‘assets/js/*.js’);
Todos los archivos con extensión .js dentro del
directorio assets/js
Gulp
gulp.src()
El método src() es el encargado de especificar la
localización de los ficheros/assets existentes.
gulp.src(‘assets/js/**/*.js’);
Todos los archivos con extensión .js que estén
dentro de assets/js/ o alguna carpeta que pueda
contener js/. (Búsqueda recursiva por directorios)
Gulp
gulp.src()
El método gulp.dest(), indica el directorio de
destino.
gulp.dest(‘web/js’)
Gulp
gulp.dest()
El método pipe, lo inicializa el método src(), y
actúa como un tubo o canal, en el que se le van a
uniendo funciones/plugins a desempeñar.
gulp.src(‘files’)
.pipe(‘acción1’)
.pipe(‘acciónN’)
.pipe(gulp.dest(‘web/js’))
.pipe()
Gulp
Proporciona la utilidad de comprobar automáticamente
cambios en un recurso especificado.
No tenemos que estar continuamente escribiendo el comando
gulp para procesar cambios.
Abrimos un segundo proceso en la consola con: gulp watch
gulp.task(‘watch', function(){
return gulp.watch(‘ficheros’, [‘styles’, ‘js’])
});
Gulp
gulp.watch()
Gulp
Sintaxis
• Ejemplo gráfico de task()
gulp.task(‘mario’, function( ) {
});
gulp.task(‘mario’, function( ) {
gulp.src(‘asset/*.scss’)
});
gulp.task(‘mario’, function( ) {
gulp.src(‘asset/*.scss’)
.pipe(‘pluginProcesarSass’())
});
gulp.task(‘mario’, function( ) {
gulp.src(‘asset/*.scss’)
.pipe(‘pluginProcesarSass’())
.pipe(‘pluginMinificar’())
});
gulp.task(‘mario’, function( ) {
gulp.src(‘asset/*.scss’)
.pipe(‘pluginProcesarSass’())
.pipe(‘pluginMinificar’())
.pipe(gulp.dest(‘web/css’));
});
Gulp
Sintaxis
• Ejemplo procesando archivos sass y
minificado del archivo css
gulpfile.js
var gulp = require('gulp');
var sass = require('gulp-sass');
var cleanCSS = require('gulp-clean-css');
gulp.task('styles', function () {
gulp.src('app/assets/sass/*.scss')
.pipe(sass())
.pipe(cleanCSS())
.pipe(gulp.dest('web/css'));
});
gulp.task('default', ['styles']);
Gulp
Plugins básicos
gulp-util: Permite añadir un poco de lógica a gulp, incluir mensajes
logs mejorados con colores etc.
https://github.com/gulpjs/gulp-util
Gulp
Plugins básicos
npm install —save-dev gulp-util
#gulpfile.js
var uglify = require('gulp-util');
gulp.task('status', function() {
gutil.log(gutil.colors.yellow('Gulp en modo' + gutil.env.prod ? ' producción' : ' desarrollo'));

gutil.log(gutil.colors.blue('Para activar Gulp en producción: gulp --prod'));
});
gulp-uglifyjs: Crea un archivo JavaScript a partir de varios y lo
minifica https://www.npmjs.com/package/gulp-uglifyjs
Gulp
Plugins básicos
npm install —save-dev gulp-uglifyjs
#gulpfile.js
var uglify = require('gulp-uglifyjs');
gulp.task('uglify', function() {
gulp.src('public/js/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist/js'))
});
gulp-sass: Procesa archivos sass a css.
https://www.npmjs.com/package/gulp-sass
Gulp
Plugins básicos
npm install —save-dev gulp-sass
#gulpfile.js
var uglify = require('gulp-uglifyjs');
gulp.task('styles', function() {
gulp.src('assets/css/*.scss')
.pipe(sass())
.pipe(gulp.dest('web/css'))
});
gulp-sass: Procesa archivos sass a css.
https://www.npmjs.com/package/gulp-sass
Gulp
Plugins básicos
npm install —save-dev gulp-sass
#gulpfile.js
var uglify = require('gulp-uglifyjs');
gulp.task('styles', function() {
gulp.src('assets/css/*.scss')
.pipe(sass())
.pipe(gulp.dest('web/css'))
});
gulp-clean-css: Minifica archivos css
https://www.npmjs.com/package/gulp-clean-css
Gulp
Plugins básicos
npm install —save-dev gulp-clean-css
#gulpfile.js
var cleanCSS = require(‘gulp-clean-css');
gulp.task('styles', function() {
gulp.src('assets/css/*.scss')
.pipe(sass())
.pipe(cleanCSS())
.pipe(gulp.dest('web/css'))
});
gulp-sourcemaps: Permite poder ver desde el inspector de código
del navegador, el archivo original donde se encuentra el código.
https://www.npmjs.com/package/gulp-sourcemaps
Gulp
Plugins básicos
npm install —save-dev gulp-sourcemaps
#gulpfile.js
var sourcemaps = require(‘gulp-clean-css’);
gulp.task('styles', function() {
gulp.src(‘assets/css/*.scss')
.pipe(sourcemaps.init())
.pipe(sass())
.pipe(cleanCSS())
.pipe(sourcemaps.write())
.pipe(gulp.dest('web/css'))
});
Assets en Symfony
Desde la versión 2.8, Symfony no incluye por defecto
AsseticBundle, aunque podemos seguir utilizándolo
instalándonos en bundle
http://symfony.com/doc/current/assetic/asset_management.html
Assets Symfony
Adios a assetic
En Symfony ubicamos nuestros assets en los
directorios Resources/public de los bundles o en app/
En el libro de buenas prácticas de Symfony,
recomienda almacenar todos los assets en el
directorio público web/
Assets Symfony
Ubicando nuestros assets
Para no guardar los assets originales en la carpeta
publica, los guardamos en
app/Resources/assets y a través Gulp (u otras herramientas)
se procesan y generan los assets dentro de la
carpeta /web
Assets Symfony
Ubicando nuestros assets
Assets Symfony
Estructura de un proyecto
app
Resources
   assets
   public
   views
[ . . .]
composer.json
composer.lock
node_modules
package.json
gulpfile.js
src
vendor
web
Assets Symfony
Estructura de un proyectoapp
Resources
   assets
      img
      js
      sass
[ . . .]
composer.json
composer.lock
node_modules
package.json
gulpfile.js
src
vendor
web
Assets originales
Assets Symfony
Estructura de un proyecto
app
Resources
   assets
   public
   views
[ . . .]
composer.json
composer.lock
node_modules
package.json
gulpfile.js
src
vendor
web
Gestión de dependencias Frontend
Assets Symfony
Estructura de un proyecto
app
Resources
   assets
   public
   views
[ . . .]
composer.json
composer.lock
node_modules
package.json
gulpfile.js
src
vendor
web
Gestión de dependencias Frontend
Dependencias Frontend
Assets Symfony
Estructura de un proyecto
app
Resources
   assets
   public
   views
[ . . .]
composer.json
composer.lock
node_modules
package.json
gulpfile.js
src
vendor
web
Configuración Gulp
Assets Symfony
Estructura de un proyecto
app
Resources
   assets
   public
   views
[ . . .]
composer.json
composer.lock
node_modules
package.json
gulpfile.js
src
vendor
web Assets públicos
¡Usas Git!
.gitignore
Recuerda no incluir:
node_modules/
web/assets
Ejemplo práctico
Symfony + Gulp
https://github.com/JuanLuisGarciaBorrego/symfony-pack
Gracias
@JuanluGarciaB
blog.juanluisgarciaborrego.com
FeedBack:
juanluisgarciaborrego@gmail.com

Más contenido relacionado

La actualidad más candente

Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosaFco Javier Núñez Berrocoso
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyJose Juan R. Zuñiga
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework SymfonyAlejandro Hernández
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2Mario IC
 
Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Raul Hugo
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Raul Fraile
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradleDavid Gómez García
 
Por qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápidoPor qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápidoCarlos Granados
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DBjubacalo
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHPAlicantePHP
 
Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeersbetabeers
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
node-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsnode-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsMariano Iglesias
 
Slides components en
Slides components enSlides components en
Slides components enJavier López
 

La actualidad más candente (19)

Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework Symfony
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradle
 
Por qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápidoPor qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápido
 
Segunda sesion
Segunda sesionSegunda sesion
Segunda sesion
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Dar lab1819
Dar lab1819Dar lab1819
Dar lab1819
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DB
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
 
Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeers
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
node-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsnode-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.js
 
Slides components en
Slides components enSlides components en
Slides components en
 

Similar a Gulp js php sevilla 28 septiembre 2016

PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365Demian Raschkovan
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
Cómo hacer front end y parecer bueno
Cómo hacer front end y parecer buenoCómo hacer front end y parecer bueno
Cómo hacer front end y parecer buenoRafael Terán Torralbo
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispanohdgarcia
 
Usando Sass y gulp para el desarrollo de temas en WordPress
Usando Sass y gulp para el desarrollo de temas en WordPressUsando Sass y gulp para el desarrollo de temas en WordPress
Usando Sass y gulp para el desarrollo de temas en WordPressNúria Ramoneda Aiguadé
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPJavier Eguiluz
 
04 taller-django
04 taller-django04 taller-django
04 taller-djangosamerscd
 
Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y BackEric Zeidan
 
Clase 5 07_pasando de php a node_js
Clase 5 07_pasando de php a node_jsClase 5 07_pasando de php a node_js
Clase 5 07_pasando de php a node_jsfavilaf1200
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadSantiago Zarate
 
Manual analisis dominancia_1
Manual analisis dominancia_1Manual analisis dominancia_1
Manual analisis dominancia_1vilna2011
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 

Similar a Gulp js php sevilla 28 septiembre 2016 (20)

Automatización de tareas con Gulp
Automatización de tareas con GulpAutomatización de tareas con Gulp
Automatización de tareas con Gulp
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Glpk+java+windows
Glpk+java+windowsGlpk+java+windows
Glpk+java+windows
 
Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Cómo hacer front end y parecer bueno
Cómo hacer front end y parecer buenoCómo hacer front end y parecer bueno
Cómo hacer front end y parecer bueno
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
 
Usando Sass y gulp para el desarrollo de temas en WordPress
Usando Sass y gulp para el desarrollo de temas en WordPressUsando Sass y gulp para el desarrollo de temas en WordPress
Usando Sass y gulp para el desarrollo de temas en WordPress
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
 
04 taller-django
04 taller-django04 taller-django
04 taller-django
 
gulp-techdencias
gulp-techdenciasgulp-techdencias
gulp-techdencias
 
Mercurial
MercurialMercurial
Mercurial
 
Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y Back
 
Clase 5 07_pasando de php a node_js
Clase 5 07_pasando de php a node_jsClase 5 07_pasando de php a node_js
Clase 5 07_pasando de php a node_js
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.
 
Manual analisis dominancia_1
Manual analisis dominancia_1Manual analisis dominancia_1
Manual analisis dominancia_1
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 

Más de Agencia INNN

Aprenday: Las cosas que más molan del mundo
Aprenday: Las cosas que más molan del mundoAprenday: Las cosas que más molan del mundo
Aprenday: Las cosas que más molan del mundoAgencia INNN
 
Aprenday: el formato GIF como herramienta creativa
Aprenday: el formato GIF como herramienta creativaAprenday: el formato GIF como herramienta creativa
Aprenday: el formato GIF como herramienta creativaAgencia INNN
 
English for advertising
English for advertising English for advertising
English for advertising Agencia INNN
 
#Aprenday. Técnicas de retórica y persuasión en publicidad.
#Aprenday. Técnicas de retórica y persuasión en publicidad.#Aprenday. Técnicas de retórica y persuasión en publicidad.
#Aprenday. Técnicas de retórica y persuasión en publicidad.Agencia INNN
 
#Aprenday: Cómo montarte tu estrategia Inbound Marketing a bajo coste
#Aprenday:  Cómo montarte tu estrategia Inbound Marketing a bajo coste#Aprenday:  Cómo montarte tu estrategia Inbound Marketing a bajo coste
#Aprenday: Cómo montarte tu estrategia Inbound Marketing a bajo costeAgencia INNN
 
Introducción a la gamificación
Introducción a la gamificaciónIntroducción a la gamificación
Introducción a la gamificaciónAgencia INNN
 
Formación Innn: Planificación de medios
Formación Innn: Planificación de mediosFormación Innn: Planificación de medios
Formación Innn: Planificación de mediosAgencia INNN
 
Formación INNN: Adwords básico
Formación INNN: Adwords básicoFormación INNN: Adwords básico
Formación INNN: Adwords básicoAgencia INNN
 
Presentación Achilipú
Presentación AchilipúPresentación Achilipú
Presentación AchilipúAgencia INNN
 
Manual de privacidad en Facebook
Manual de privacidad en FacebookManual de privacidad en Facebook
Manual de privacidad en FacebookAgencia INNN
 
Glosario básico de Twitter
Glosario básico de TwitterGlosario básico de Twitter
Glosario básico de TwitterAgencia INNN
 

Más de Agencia INNN (11)

Aprenday: Las cosas que más molan del mundo
Aprenday: Las cosas que más molan del mundoAprenday: Las cosas que más molan del mundo
Aprenday: Las cosas que más molan del mundo
 
Aprenday: el formato GIF como herramienta creativa
Aprenday: el formato GIF como herramienta creativaAprenday: el formato GIF como herramienta creativa
Aprenday: el formato GIF como herramienta creativa
 
English for advertising
English for advertising English for advertising
English for advertising
 
#Aprenday. Técnicas de retórica y persuasión en publicidad.
#Aprenday. Técnicas de retórica y persuasión en publicidad.#Aprenday. Técnicas de retórica y persuasión en publicidad.
#Aprenday. Técnicas de retórica y persuasión en publicidad.
 
#Aprenday: Cómo montarte tu estrategia Inbound Marketing a bajo coste
#Aprenday:  Cómo montarte tu estrategia Inbound Marketing a bajo coste#Aprenday:  Cómo montarte tu estrategia Inbound Marketing a bajo coste
#Aprenday: Cómo montarte tu estrategia Inbound Marketing a bajo coste
 
Introducción a la gamificación
Introducción a la gamificaciónIntroducción a la gamificación
Introducción a la gamificación
 
Formación Innn: Planificación de medios
Formación Innn: Planificación de mediosFormación Innn: Planificación de medios
Formación Innn: Planificación de medios
 
Formación INNN: Adwords básico
Formación INNN: Adwords básicoFormación INNN: Adwords básico
Formación INNN: Adwords básico
 
Presentación Achilipú
Presentación AchilipúPresentación Achilipú
Presentación Achilipú
 
Manual de privacidad en Facebook
Manual de privacidad en FacebookManual de privacidad en Facebook
Manual de privacidad en Facebook
 
Glosario básico de Twitter
Glosario básico de TwitterGlosario básico de Twitter
Glosario básico de Twitter
 

Gulp js php sevilla 28 septiembre 2016

  • 1. Gulp Gestión de assets en Symfony PHPSevilla 28 Septiembre 2016 Juan Luis García Borrego
  • 3. Sobre mí Desarrollador Symfony en Innn Juan Luis García Borrego @JuanluGarciaB juanluisgarciaborrego.com
  • 5. Flujo de trabajo Assets en Symfony NPM Gulp Ejemplo práctico
  • 6. Flujo de trabajo Assets en Symfony NPM Gulp Ejemplo práctico
  • 7. Flujo de trabajo Assets en Symfony NPM Gulp Ejemplo práctico
  • 8. Flujo de trabajo Assets en Symfony NPM Gulp Ejemplo práctico
  • 9. Flujo de trabajo Assets en Symfony NPM Gulp Ejemplo práctico
  • 11. El flujo de trabajo de un desarrollador se ha convertido en una tarea un poco “compleja”. Para una aplicación sencilla como mínimo en el frontend usamos algún framework css (Bootstrap, Materialize, PureCss, Foundation, otros.), un preprocesador css (Sass, LEES, otros), alguna librería JavaScript (jQuery, Angular, React, Vue, infinitas) Además, necesito gestionar las versiones, unir todos los css/js en un archivo y minificarlo para que mi web cargue más rápido y lo que surja…. Flujo de trabajo
  • 13. Al igual que Composer nos facilita la vida gestionando nuestros vendors Existen numerosas herramientas y automatizadores de tareas FrontEnd que nos facilitan nuestro día a día Grunt, Bower, Gulp, WebPack Flujo de trabajo
  • 14. NPM
  • 16. Gestor de paquetes FrontEnd y BackEnd [NodeJS] Busca, gestiona y reutiliza librerías de otros programadores Viene incluido al instalar Node JS NPM Node Package Manager
  • 17. Gestor de paquetes FrontEnd y BackEnd [NodeJS] Busca, gestiona y reutiliza librerías de otros programadores Viene incluido al instalar Node JS Misma funcionalidad que Composer en PHP NPM Node Package Manager
  • 20. En este archivo queda reflejado toda la configuración de un “proyecto node” (nombre, autor, licencia, versión, dependencias, etc.) En nuestro caso informa de las dependencias node utilizadas. El archivo package.json estará alojado en el directorio raíz del proyecto NPM package.json
  • 23. $ npm init NPM Inicializar proyecto Nos pedirá datos de nuestro proyecto y generará el archivo package.json
  • 24. { “name”:”ejemplo“, "version": "1.0.0", "description": "Descripción del proyecto", "dependencies": { }, "devDependencies": { }, "keywords": [ "phpsevilla", "gulp" ], "author": "Juan Luis García Borrego", "license": "MIT" } package.json
  • 25. $ npm install —save-dev NOMBRE NPM Añadir dependencias Instala el paquete NOMBRE (guarda los archivos en el directorio node_modules) y añade la librería al archivo package.json en el apartado de dependencias de desarrollo. "devDependencies": { },
  • 26. $ npm remove —save-dev NOMBRE NPM Eliminar dependencias Elimina el paquete NOMBRE (node_modules/) y borra la librería al archivo package.json en el apartado de dependencias de desarrollo. "devDependencies": { },
  • 27. $ npm outdated NPM Chequea si existe nuevas versiones Para instalar la nueva versión: $npm install gulp@3.9.1 —save-dev Package Current Wanted Latest Location gulp 2.7.0 2.7.0 3.9.1 php-sevilla-gulp
  • 28. Gulp
  • 30. Una herramienta que nos permite automatizar tareas comunes de desarrollo a través del terminal y gracias su gran cantidad de plugins nos permiten realizar multitud de tareas como: • Unir y mitificar archivos CSS / JavaScript • Procesa los archivos CSS, que utilicen preprocesadores como Sass, Less u otros. • Reduce el tamaño de las imágenes • http://gulpjs.com/plugins/ Gulp Introducción
  • 32. Instalación global $ sudo npm install —global gulp Instalación como dependencia $ npm install —save-dev gulp Gulp Instalación
  • 34. En este archivo vamos a indicar cada una de las task a realizar. El archivo gulpfile.js se tiene que crear en el directorio raíz del proyecto. Gulp gulpfile.js
  • 35. var gulp = require('gulp'); gulp.task('default', function(){ console.log("Hola PHP Sevilla"); }); gulpfile.js
  • 36. var gulp = require('gulp'); gulp.task('default', function(){ console.log("Hola PHP Sevilla"); }); gulpfile.js ➜ phpsevilla gulp [19:23:05] Using gulpfile ~/Sites/lab/phpsevilla/gulpfile.js [19:23:05] Starting 'default'... Hola PHP Sevilla [19:23:05] Finished 'default' after 92 μs ➜ phpsevilla gulpfile.js
  • 38. En el archivo de configuración gulpfile.js tenemos que definir todos los plugins utilizados, incluido gulp. var NombrePlugin1 = require(‘nombrePlugin1’); var NombrePluginN = require(‘nombrePluginN’); Gulp var gulp = require(‘gulp’);
  • 39. Las tareas se definen llamando al método .task(). Como primer parámetro se le pasa el nombre de la tarea, y como se fundo se define una función anónima que contendrá la lógica del mismo. gulp.task(‘nombreTarea’, function() { //tarea }); Gulp gulp.task()
  • 40. Por defecto, gulp tiene una tarea definida llama default. Al ejecutar en la terminal el comando gulp es la tarea que se ejecuta. gulp.task('default', ['styles', 'fonts', 'images', ‘scripts’]); Al ejecutar el comando gulp: Se ejecuta la tarea default, que llama a las tareas incluidas en el array Gulp gulp.task()
  • 41. El método src() es el encargado de especificar la localización de los ficheros/assets existentes. gulp.src(‘assets/js/*.js’); Todos los archivos con extensión .js dentro del directorio assets/js Gulp gulp.src()
  • 42. El método src() es el encargado de especificar la localización de los ficheros/assets existentes. gulp.src(‘assets/js/**/*.js’); Todos los archivos con extensión .js que estén dentro de assets/js/ o alguna carpeta que pueda contener js/. (Búsqueda recursiva por directorios) Gulp gulp.src()
  • 43. El método gulp.dest(), indica el directorio de destino. gulp.dest(‘web/js’) Gulp gulp.dest()
  • 44. El método pipe, lo inicializa el método src(), y actúa como un tubo o canal, en el que se le van a uniendo funciones/plugins a desempeñar. gulp.src(‘files’) .pipe(‘acción1’) .pipe(‘acciónN’) .pipe(gulp.dest(‘web/js’)) .pipe() Gulp
  • 45. Proporciona la utilidad de comprobar automáticamente cambios en un recurso especificado. No tenemos que estar continuamente escribiendo el comando gulp para procesar cambios. Abrimos un segundo proceso en la consola con: gulp watch gulp.task(‘watch', function(){ return gulp.watch(‘ficheros’, [‘styles’, ‘js’]) }); Gulp gulp.watch()
  • 48. gulp.task(‘mario’, function( ) { gulp.src(‘asset/*.scss’) });
  • 49. gulp.task(‘mario’, function( ) { gulp.src(‘asset/*.scss’) .pipe(‘pluginProcesarSass’()) });
  • 50. gulp.task(‘mario’, function( ) { gulp.src(‘asset/*.scss’) .pipe(‘pluginProcesarSass’()) .pipe(‘pluginMinificar’()) });
  • 51. gulp.task(‘mario’, function( ) { gulp.src(‘asset/*.scss’) .pipe(‘pluginProcesarSass’()) .pipe(‘pluginMinificar’()) .pipe(gulp.dest(‘web/css’)); });
  • 52. Gulp Sintaxis • Ejemplo procesando archivos sass y minificado del archivo css
  • 53. gulpfile.js var gulp = require('gulp'); var sass = require('gulp-sass'); var cleanCSS = require('gulp-clean-css'); gulp.task('styles', function () { gulp.src('app/assets/sass/*.scss') .pipe(sass()) .pipe(cleanCSS()) .pipe(gulp.dest('web/css')); }); gulp.task('default', ['styles']);
  • 55. gulp-util: Permite añadir un poco de lógica a gulp, incluir mensajes logs mejorados con colores etc. https://github.com/gulpjs/gulp-util Gulp Plugins básicos npm install —save-dev gulp-util #gulpfile.js var uglify = require('gulp-util'); gulp.task('status', function() { gutil.log(gutil.colors.yellow('Gulp en modo' + gutil.env.prod ? ' producción' : ' desarrollo'));
 gutil.log(gutil.colors.blue('Para activar Gulp en producción: gulp --prod')); });
  • 56. gulp-uglifyjs: Crea un archivo JavaScript a partir de varios y lo minifica https://www.npmjs.com/package/gulp-uglifyjs Gulp Plugins básicos npm install —save-dev gulp-uglifyjs #gulpfile.js var uglify = require('gulp-uglifyjs'); gulp.task('uglify', function() { gulp.src('public/js/*.js') .pipe(uglify()) .pipe(gulp.dest('dist/js')) });
  • 57. gulp-sass: Procesa archivos sass a css. https://www.npmjs.com/package/gulp-sass Gulp Plugins básicos npm install —save-dev gulp-sass #gulpfile.js var uglify = require('gulp-uglifyjs'); gulp.task('styles', function() { gulp.src('assets/css/*.scss') .pipe(sass()) .pipe(gulp.dest('web/css')) });
  • 58. gulp-sass: Procesa archivos sass a css. https://www.npmjs.com/package/gulp-sass Gulp Plugins básicos npm install —save-dev gulp-sass #gulpfile.js var uglify = require('gulp-uglifyjs'); gulp.task('styles', function() { gulp.src('assets/css/*.scss') .pipe(sass()) .pipe(gulp.dest('web/css')) });
  • 59. gulp-clean-css: Minifica archivos css https://www.npmjs.com/package/gulp-clean-css Gulp Plugins básicos npm install —save-dev gulp-clean-css #gulpfile.js var cleanCSS = require(‘gulp-clean-css'); gulp.task('styles', function() { gulp.src('assets/css/*.scss') .pipe(sass()) .pipe(cleanCSS()) .pipe(gulp.dest('web/css')) });
  • 60. gulp-sourcemaps: Permite poder ver desde el inspector de código del navegador, el archivo original donde se encuentra el código. https://www.npmjs.com/package/gulp-sourcemaps Gulp Plugins básicos npm install —save-dev gulp-sourcemaps #gulpfile.js var sourcemaps = require(‘gulp-clean-css’); gulp.task('styles', function() { gulp.src(‘assets/css/*.scss') .pipe(sourcemaps.init()) .pipe(sass()) .pipe(cleanCSS()) .pipe(sourcemaps.write()) .pipe(gulp.dest('web/css')) });
  • 62. Desde la versión 2.8, Symfony no incluye por defecto AsseticBundle, aunque podemos seguir utilizándolo instalándonos en bundle http://symfony.com/doc/current/assetic/asset_management.html Assets Symfony Adios a assetic
  • 63. En Symfony ubicamos nuestros assets en los directorios Resources/public de los bundles o en app/ En el libro de buenas prácticas de Symfony, recomienda almacenar todos los assets en el directorio público web/ Assets Symfony Ubicando nuestros assets
  • 64. Para no guardar los assets originales en la carpeta publica, los guardamos en app/Resources/assets y a través Gulp (u otras herramientas) se procesan y generan los assets dentro de la carpeta /web Assets Symfony Ubicando nuestros assets
  • 65. Assets Symfony Estructura de un proyecto app Resources    assets    public    views [ . . .] composer.json composer.lock node_modules package.json gulpfile.js src vendor web
  • 66. Assets Symfony Estructura de un proyectoapp Resources    assets       img       js       sass [ . . .] composer.json composer.lock node_modules package.json gulpfile.js src vendor web Assets originales
  • 67. Assets Symfony Estructura de un proyecto app Resources    assets    public    views [ . . .] composer.json composer.lock node_modules package.json gulpfile.js src vendor web Gestión de dependencias Frontend
  • 68. Assets Symfony Estructura de un proyecto app Resources    assets    public    views [ . . .] composer.json composer.lock node_modules package.json gulpfile.js src vendor web Gestión de dependencias Frontend Dependencias Frontend
  • 69. Assets Symfony Estructura de un proyecto app Resources    assets    public    views [ . . .] composer.json composer.lock node_modules package.json gulpfile.js src vendor web Configuración Gulp
  • 70. Assets Symfony Estructura de un proyecto app Resources    assets    public    views [ . . .] composer.json composer.lock node_modules package.json gulpfile.js src vendor web Assets públicos
  • 73. Ejemplo práctico Symfony + Gulp https://github.com/JuanLuisGarciaBorrego/symfony-pack