Repository: petehunt/webpack-howto Branch: master Commit: dcd772bc5ff5 Files: 13 Total size: 35.3 KB Directory structure: gitextract_luql2mqu/ ├── README-es.md ├── README-tr.md ├── README-zh.md ├── README.md └── example/ ├── .gitignore ├── index.html ├── modules/ │ ├── About.js │ ├── App.css │ ├── App.js │ ├── Home.js │ └── main.js ├── package.json └── webpack.config.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: README-es.md ================================================ # webpack-howto ## Objetivo de esta guía Esta es una guía sobre como lograr lo que uno quiere usando webpack. Incluye la mayoría de las cosas que utilizamos en Instagram y nada que no utilicemos. Mi consejo: empezar con esta guía como tu documentación sobre webpack, y luego mirar la documentación oficial para aclarar conceptos y/o detalles. ## Pre-Requisitos * Saber sobre browserify, RequireJS o similares * Ver valor en: * Partir/fraccionar paquetes (Bundle splitting) * Carga asincrónica (Async loading) * Empaquetar contenido estático como imágenes y CSS ## 1. Por que webpack? * **Es como browserify** pero puede fraccionar nuestra app en múltiples archivos. Si tenemos múltiples paginas en una SPA (Single Page App), el usuario solo descarga el contenido correspondiente a la pagina actual. Si luego visita otra pagina, no vuelve a descargar código en común o repetido. * **Generalmente reemplaza a grunt o gulp** porque puede construir y empaquetar CSS, CSS pre-procesado, lenguajes compilables-a-JS e imágenes, entre otras cosas. Soporta AMA, CommonJS y otros sistemas de módulos (Angular, ES6). Si no sabes que usar, usa CommonJS. ## 2. Webpack para gente que usa Browserify Estos son equivalentes: ```js browserify main.js > bundle.js ``` ```js webpack main.js bundle.js ``` Sin embargo, webpack es mas poderoso que Browserify, por lo que generalmente queremos crear el archivo `webpack.config.js` para organizarnos mejor: ```js // webpack.config.js module.exports = { entry: './main.js', output: { filename: 'bundle.js' } }; ``` Esto es puramente JS, por lo que podemos escribir Código Real adentro. ## 3. Como llamar a webpack Entrar al directorio que contiene `webpack.config.js` y ejecutar: * `webpack` para construir una vez para desarrollo * `webpack -p` para construir una vez para producción (minificado) * `webpack --watch` para construir de forma continua e incremental en desarrollo (rápido!) * `webpack -d` para incluir mapas fuente (source maps) ## 4. Lenguajes Compilables-a-JS El equivalente en webpack para las transformaciones de browserify y los plugins de RequireJS, es un **cargador (loader)**. Aquí vemos como podemos hacer que webpack cargue soporte para CoffeeScript y JSX+ES6 (debes ejecutar `npm install babel-loader coffee-loader` primero): Ver también las [instrucciones de instalación babel-loader](https://www.npmjs.com/package/babel-loader) para dependencias adicionales (tl;dr ejecutar `npm install babel-core babel-preset-es2015 babel-preset-react`). ```js // webpack.config.js module.exports = { entry: './main.js', output: { filename: 'bundle.js' }, module: { loaders: [ { test: /\.coffee$/, loader: 'coffee-loader' }, { test: /\.js$/, loader: 'babel-loader', query: { presets: ['es2015', 'react'] } } ] } }; ``` Para habilitar requerir archivos sin especificar la extensión, hay que agregar el parámetro `resolve.extensions` declarando que tipos de archivos va a buscar webpack: ```js // webpack.config.js module.exports = { entry: './main.js', output: { filename: 'bundle.js' }, module: { loaders: [ { test: /\.coffee$/, loader: 'coffee-loader' }, { test: /\.js$/, loader: 'babel-loader', query: { presets: ['es2015', 'react'] } } ] }, resolve: { // ahora podemos hacer require('file') en vez de require('file.coffee') extensions: ['', '.js', '.json', '.coffee'] } }; ``` ## 5. Estilos (CSS) e imágenes Primero actualizamos el código para incluir contenido estático usando `require()` ```js require('./bootstrap.css'); require('./myapp.less'); var img = document.createElement('img'); img.src = require('./glyph.png'); ``` Cuando requerimos CSS (o less, etc), webpack incluye el CSS en forma de string en una linea dentro del paquete de JS, y `require()` va luego a insertar los tags de estilo `