SlideShare uma empresa Scribd logo
1 de 53
Desenredando
el toolchain
de JavaScript
Jeduan
Cornejo
@jeduan
It is practically impossible
to teach good
programming to students
that have had a prior
exposure to BASIC
— Edsger W. Dijkstra
JavaScript envenena la
mente de nuestros
jóvenes programadores
JavaScript envenena la
mente de nuestros
jóvenes programadores
— Walter Mercado
Escribiendo aplicaciones web en
2017
• Lenguaje
• Herramientas
• Librerías
Escribiendo una app en 2017
• Lenguaje
• Herramientas
• Librerías Bibliotecas
Plataforma
Navegadores tienen nuevas
versiones de forma continua
• Chrome: 6 semanas
• Firefox: 6-8 semanas
• Internet Explorer: !
• Edge: Versiones mayores cada ~8 meses
• Safari: Versiones mayores cada ~6 meses
• Chrome Android: Sigue a desktop desde Lollipop (5.0)
DevTools FTW
https://developers.google.com/web/tools/chrome-
devtools/
Lenguaje
CoffeeScript
CoffeeScript
ECMAScript 2015+
• Una versión nueva del lenguaje cada año
TC39
• http://tc39.github.io
• Propuestas pasan por niveles 0 - 4
• Stage 3: Spec completo
• Stage 4: Implementada en 2 browsers
ECMAScript 2017
• async / await
• new SharedArrayBuffer()
• '8'.padStart(4, '0')
• https://github.com/tc39/proposals
Flow / TypeScript
• Agregan tipos a JavaScript
• TS: Anders Hejlsberg
• Flow: Facebook
function sayHi (name: String) : String {
return `Hola ${name}`
}
sayHi(4) // Error
Framework
VanillaJS para los muy valientes
Angular
• Google
• JS en HTML
Vue
React
• Facebook
• Vistas declarativas
• HTML en el JS
• DOM Virtual
AST
Linter
Eslint
• airbnb
• standard
Package Manager
npm & yarn
• más de 350,000 módulos
Transpilador
babel
• modulos que usan el AST para convertir sintaxis.
• babel-preset-stage-0 -> TODAS las propuestas
• flow
• recomendación babel-preset-env
Bundler
Webpack
Webpack
• Bundler: archivo + dependencias -> salidas
• Transpilación (Babel, SCSS -> CSS, TypeScript -> JS)
• Relación entre código y assets.
• Hot Module Reload para desarrollar feliz.
Webpack
• Complicado de configurar
• Recomendación: create-react-app
<link rel="stylesheet" href="/styles/bootstrap.css" />
<link rel="stylesheet" href="/styles/shared.css" />
<link rel="stylesheet" href="/styles/app.css" />
<script src="/dist/react.min.js" ></script>
<script src="/dist/react-dom.min.js" ></script>
<script src="/dist/bootstrap-react.min.js" ></script>
<script src="/dist/app.js" ></script>
import React from 'react'
class Comments extends React.Component {
// ...
}
import React from 'react'
import shuffle from 'lodash/shuffle'
import addMinute from 'date-fns/add_minutes'
class Comments extends React.Component {
// ...
}
import React from 'react'
import shuffle from 'lodash/shuffle'
import addMinute from 'date-fns/add_minutes'
import './comments.css'
class Comments extends React.Component {
render () {
return <div class="comments"></div>
}
}
import React from 'react'
import ReactDOM from 'react-dom'
import shuffle from 'lodash/shuffle'
import addMinute from 'date-fns/add_minutes'
import './component.css'
import Logo from '../logo.svg'
class Comments extends React.Component {
render () {
return <div class="comments">
<Logo />
</div>
}
}
import React from 'react'
import ReactDOM from 'react-dom'
import shuffle from 'lodash/shuffle'
import addMinute from 'date-fns/add_minutes'
import './component.css'
import Logo from '../logo.svg'
import bgImage from '../images/hero-bg.png'
class Comments extends React.Component {
render () {
return <div class="comments"
style={{backgroundImage: bgImage}}
>
<Logo />
</div>
}
}
<link rel="stylesheet" href="/dist/app.css">
<script src="/dist/app.min.js"></script>
Webpack: The advanced parts
• Tree shaking, usar sólo partes de la librería.
• CommonsChunk: librerias en un archivo y aplicación en
otro.
• import() para separar aplicación en pequeñas unidades.
<script src="/dist/vendor.min-717bc228.js" ></script>
<!-- bibliotecas minimizadas -->
<script src="/dist/vendor.min-717bc228.js" ></script>
<!-- bibliotecas minimizadas -->
<script src="/dist/boot.min.js" ></script>
<script src="/dist/vendor.min-717bc228.js" ></script>
<!-- bibliotecas minimizadas -->
<script src="/dist/boot.min.js" ></script>
<!-- inyectado de forma dinámica -->
<script src="/dist/home.min.js" ></script>
<script src="/dist/comments.min.js" ></script>
<style>
<!-- estilos inyectados de forma dinámica -->
</style>
<script src="/dist/vendor.min-717bc228.js" ></script>
<!-- bibliotecas minimizadas -->
<script src="/dist/boot.min.js" ></script>
<!-- inyectado de forma dinámica -->
<script src="/dist/home.min.js" ></script>
<script src="/dist/comments.min.js" ></script>
<style>
<!-- estilos inyectados de forma dinámica -->
</style>
<script src="/dist/vendor.min-717bc228.js" ></script>
<!-- bibliotecas minimizadas -->
<script src="/dist/boot.min.js" ></script>
<!-- inyectado de forma dinámica -->
<script src="/dist/home.min.js" ></script>
<script src="/dist/comments.min.js" ></script>
En conclusión
• JS sigue moviendose rápido.
• Nuevas herramientas permiten desarrollar aplicaciones más
complejas.
• Algunas herramientas son complicadas todavía.
• Se recomienda adoptar poco a poco.
Preguntas
@jeduan
http://
meetup.com/
eventloop

Mais conteúdo relacionado

Mais procurados

atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
AlicantePHP
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con selenium
marianoshin
 

Mais procurados (20)

Greach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con GriffonGreach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con Griffon
 
Selenium
SeleniumSelenium
Selenium
 
atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13
 
Springboot Overview
Springboot  OverviewSpringboot  Overview
Springboot Overview
 
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
 
Spring boot + spock
Spring boot + spockSpring boot + spock
Spring boot + spock
 
Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
 
Composer & SemVer
Composer & SemVerComposer & SemVer
Composer & SemVer
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con selenium
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
 
Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Java desde cero maven
Java desde cero mavenJava desde cero maven
Java desde cero maven
 
Todo sobre mis APIs
Todo sobre mis APIsTodo sobre mis APIs
Todo sobre mis APIs
 
Maven
MavenMaven
Maven
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 

Semelhante a Desenredando el toolchain de Javascript

Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
Nilson Gongora
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
ERWIN AGUILAR
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
Leo31146695
 

Semelhante a Desenredando el toolchain de Javascript (20)

Sencha ExtJS introduccion
Sencha ExtJS introduccion Sencha ExtJS introduccion
Sencha ExtJS introduccion
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Android
AndroidAndroid
Android
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
Introduccion android
Introduccion androidIntroduccion android
Introduccion android
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparency
 
Flex Mobile
Flex MobileFlex Mobile
Flex Mobile
 
Tutorial sobre Eclipse
Tutorial sobre EclipseTutorial sobre Eclipse
Tutorial sobre Eclipse
 
Tutorial de-eclipse-cltt-mpr-dlnl
Tutorial de-eclipse-cltt-mpr-dlnlTutorial de-eclipse-cltt-mpr-dlnl
Tutorial de-eclipse-cltt-mpr-dlnl
 
Tutorial de-eclipse-cltt-mpr-dlnl
Tutorial de-eclipse-cltt-mpr-dlnlTutorial de-eclipse-cltt-mpr-dlnl
Tutorial de-eclipse-cltt-mpr-dlnl
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Cv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-webCv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-web
 
Android basics v3
Android basics v3Android basics v3
Android basics v3
 
Android
AndroidAndroid
Android
 
Maestrosdelweb guia-android
Maestrosdelweb guia-androidMaestrosdelweb guia-android
Maestrosdelweb guia-android
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
 
Guía Android
Guía AndroidGuía Android
Guía Android
 
Mdw guia-android-1.3
Mdw guia-android-1.3Mdw guia-android-1.3
Mdw guia-android-1.3
 

Mais de Software Guru

Mais de Software Guru (20)

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Desenredando el toolchain de Javascript