Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[RuPy Campinas 2016] Que bagunça é essa, JavaScript?!

[RuPy Campinas 2016] Que bagunça é essa, JavaScript?!

Uma tentativa de explicar essa bagunça que anda o mundo JavaScript e desmistificar algumas dúvidas.

More Decks by Talysson de Oliveira Cassiano

Other Decks in Programming

Transcript

  1. O mundo JavaScript está evoluindo rápido demais. E isso não

    é ruim. < 2009 ≥ 2009, < 2013 ≥ 2013
  2. O mundo JavaScript está evoluindo rápido demais. E isso não

    é ruim. < 2009 ≥ 2009, < 2013 ≥ 2013
  3. Você não entende JavaScript ➔ Não entende porque JavaScript não

    tem uma standard lib ➔ Acha que jQuery é a solução pra todo projeto ➔ Espera que JavaScript seja igual a <sua linguagem preferida> ➔ Acha que “classes” arrumaram o JavaScript ➔ Acompanha hypes
  4. JavaScript só passou a ser levado a sério recentemente ➔

    O Node surgiu em 2009 ➔ O Ruby on Rails já tinha 3 anos ➔ O Django já tinha 4 anos ➔ O Symfony já tinha 4 anos ➔ A comunidade JavaScript é diferente das anteriores
  5. Mas e aquela bagunça?! ➔ Gulp, Grunt ou npm scripts?

    ➔ NPM ou Bower? ➔ Pra que tanto micromódulo? ➔ Qual framework usar? ➔ Babel? Webpack? Browserify? ➔ JSX = HTML no meio do JS? ➔ Pra que PostCSS? E o SASS? ➔ CSS no meio do JS também?!
  6. grunt.initConfig({ sass: { options: { sourceMap: true }, dist: {

    files: { 'main.css': 'main.scss' } } } }); var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass', function () { return gulp .src('./sass/**/*.scss') .pipe(sass()) .pipe(gulp.dest('./dest’)); }); { … “sass”: “node-sass style.scss style.css" … }
  7. grunt.initConfig({ sass: { options: { sourceMap: true }, dist: {

    files: { 'main.css': 'main.scss' } } } }); var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass', function () { return gulp .src('./sass/**/*.scss') .pipe(sass()) .pipe(gulp.dest('./dest’)); }); { … “sass”: “node-sass style.scss style.css" … } Instalação de global Instalação de global Não escala
  8. grunt.initConfig({ sass: { options: { sourceMap: true }, dist: {

    files: { 'main.css': 'main.scss' } } } }); var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass', function () { return gulp .src('./sass/**/*.scss') .pipe(sass()) .pipe(gulp.dest('./dest’)); }); + OU { … “sass”: “grunt sass", “sass”: “gulp sass" … }
  9. grunt.initConfig({ sass: { options: { sourceMap: true }, dist: {

    files: { 'main.css': 'main.scss' } } } }); var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass', function () { return gulp .src('./sass/**/*.scss') .pipe(sass()) .pipe(gulp.dest('./dest’)); }); + OU { … “sass”: “grunt sass", “sass”: “gulp sass" … }
  10. ➔ Package manager padrão do Node ➔ Módulos (JavaScript) em

    geral ➔ Pode conter dependências compiladas ➔ NPM + Browserify/Webpack ➔ Instalado com o NPM ➔ Pacotes front-end ➔ Dependências estáticas ➔ Comunidade inconstante ➔ Bower + RequireJS
  11. ➔ Package manager padrão do Node ➔ Módulos (JavaScript) em

    geral ➔ Pode conter dependências compiladas ➔ NPM + Browserify/Webpack ➔ Instalado com o NPM ➔ Pacotes front-end ➔ Dependências estáticas ➔ Comunidade inconstante ➔ Bower + RequireJS
  12. Pra que tanto micromódulo? ➔ O JavaScript não tem uma

    standard lib rica ➔ O tamanho do executável (bundle) é importante ➔ Fazer polyfill de uma std lib deixa o bundle maior ➔ Difícil de entender se você vem de uma linguagem de backend ➔ Micromódulos oferecem apenas o necessário ➔ Exageros acontecem
  13. Qual framework usar? ➔ Não existe bala de prata ➔

    O seu problema deve caber no framework, não o contrário ➔ A escolha não se relaciona só com a complexidade da UI ➔ Não use um framework se você não entende porque está usando ➔ Ignore os hypes
  14. Babel? Webpack? Browserify? ➔ Não use o Babel se você

    não sabe programar sem ele ➔ Browserify deve ser sua escolha inicial ➔ Caso precise do Babel, use o Babelify ➔ Só migre para o Webpack se surgir a necessidade
  15. // ... render() { return (<div> { items.map((item) => {

    return <ListItem item={ item } /> }) } </div>); } // ... Ou coloca HTML no seu JavaScript tornando-o JavaScript puro JSX
  16. // ... render() { return React.createElement('div', null, items.map((item) => {

    return React.createElement( ListItem, { item: item } ); }) ); } // ... Sim, JavaScript puro JS
  17. Pra que PostCSS? E o SASS? ➔ Só substitua SASS

    para PostCSS se surgir a necessidade ➔ PostCSS dá mais controle ao desenvolvedor ➔ Você pode usá-los juntos
  18. var divStyle = { color: 'white', backgroundImage: `url(${ imgUrl })`

    }; ReactDOM.render(<div style={divStyle}>Hello World!</div>, mountNode);
  19. CSS no meio do JS também?! ➔ A maioria da

    comunidade não usa essa técnica ➔ Diminui a performance ➔ Hypes fazem parecer que é estritamente necessário