En esta pequeña guía encontrarán lo necesario para empezar a utilizar Webpack. Go!!!
Anteriormente haz visto que Babel es una herramienta que transforma
tu código JS de última generación a un JS que se pueda entender en los
navegadores actuales o node.js
. Para este caso de ES6 a ES5, por
ahora...
En el LMS hay algunos ejemplos de esto
Al momento de instalar Babel deberás agregar todos los plugins (complementos que sirven para agregar una función nueva y específica) necesarios para que funcione correctamente. Puedes ver que en la documentación se detallan varios plugins, entonces si necesitas usar todo el estándar tendrías que instalar cada uno e imáginate hacer eso, sería demasiado.
Por eso hay un preset (paquete especial) que incluye todo el
estándar que se llama env
.
También necesitarás instalar el preset de react
así no se necesitará
importar el transformador de jsx
.
Y todo esto lo vas a integrar con Webpack.
Webpack es un empaquetador de módulos. Pero, ¿qué es eso? Bueno, es tomar todos los módulos que se usan en tu proyecto y luego lo agrupa en un solo paquete.
En la página de Webpack puedes ver que hay muchos archivos JS, CSS, etc; que hacen de un sitio web muy grande. Entonces Webpack toma esos archivos y los convierte, minimiza, optimiza empaquetándolos a uno solo o cuántos desees.
Entonces con esto "transformamos" nuestro código del entorno de desarrollo a un entorno de producción.
Deberás tener instalado node.js
y npm
. Si por algún motivo no lo
tienes, puedes descargarlo desde su página web.
Recuerda que npm
se instalará de manera automática. Luego, si deseas,
verifica las versiones descargadas con los siguientes comandos:
node --version
npm --version
Vas a instalar varias dependencias y para ello puedes utilizarnpm
o
yarn
. Yo sé que te gusta npm
, entonces no se diga más =)
-
Crearás tu
package.json
y completarás los campos solicitados:npm init
-
Instalarás las dependencias, hay 2 tipos:
Desarrollo: para fase de desarrollo:
--save-dev
. Ej: webpack, babel, etc.Producción: propias del proyecto:
--save
. Ej: react, bootstrap, etc.Se pueden instalar de a uno o varias a la vez. Empezarás con las de desarrollo:
2.1. Tener
webpack
de forma global2.2.
webpack
2.3.
webpack-cli
2.4.
webpack-dev-server
: servidor de desarrollonpm install -g webpack npm install --save-dev webpack webpack-cli webpack-dev-server
-
Instalarás Babel:
3.1.
babel-cli
: incluye el core de babel, el cual es necesario, de lo contrario no funcionaría babel3.2.
babel-loader
: cargador, nos permitirá usar babel en webpack3.3.
babel-preset-env
: permite usar el nuevo estándar de ES63.4.
babel-preset-react
: permite usar reactnpm install --save-dev babel-cli babel-loader babel-preset-env babel-preset-react
-
Si usas estilos, webpack ofrece un cargador para los estilos; así usarás un CSS específico para cada componente y podrás crear un CSS final:
npm install --save-dev css-loader style-loader
-
Webpack se encargará de crear el ambiente de producción, por lo que hará una copia de tus carpetas al
public
odist
de forma automática con:npm install --save-dev html-webpack-plugin
-
Ahora, para que se abra el navegador usarás:
npm install --save-dev open-browser-webpack-plugin
-
Dependencias de producción:
react
yreact-dom
npm install --save react react-dom
Deberá quedar así:
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-loader": "^7.1.3",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.10",
"html-webpack-plugin": "^3.0.4",
"open-browser-webpack-plugin": "0.0.5",
"style-loader": "^0.20.2",
"webpack": "^4.1.0",
"webpack-dev-server": "^3.1.0"
},
"dependencies": {
"react": "^16.2.0",
"react-dom": "^16.2.0"
}
No olvides crear el archivo .babelrc
{
"presets": [
"env",
"react"
]
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Ejemplo Webpack</title>
</head>
<body>
<div class="root" id="root"></div>
<script src="main.js"></script>
</body>
</html>
Prueba inicial
var great = 'Hola promo 2017-2';
alert(great);
Ejemplo más elaborado:
var coders = [
{
name: 'miriam',
promo: '2017-1'
},
{
name: 'lily',
promo: '2017-1'
}
];
console.log(coders);
const { resolve } = require('path');
// importamos webpack
const webpack = require('webpack');
// ... y los plugins que habiamos instalado
// declarando los plugins...
const OpenBrowserPlugin = require('open-browser-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const config = {
entry: [
'./index.js' // archivo de entrada
],
output: { // archivos de salida
path: __dirname, // ruta donde va a estar el archivo, si deseo que sea aqui mismo pongo _dirname
filename: 'build.js', // archivo de salida
publicPath:'/'
},
module: {
rules: [
{
test: /\.js$/, // todos los `js`
loaders: [
'babel-loader', // los procesamos con el loader de `babel`
],
exclude: /node_modules/, // ignoramos archivos dentro de node_modules
}, // luego
{
test: /\.css$/, // todos los archivos `csss`
use: [
{ loader: "style-loader" }, // primero creamos un tag `style`
{ loader: "css-loader" } // y le injetamos el `css`
]
}
]
},
plugins: [
// llamando los plugins
new OpenBrowserPlugin({ // abre el navegador
url: 'http://localhost:8080'
}),
new HtmlWebpackPlugin({
template: './index.html',
filename: 'index.html', // nombre del archivo
inject: 'body'
})
],
devServer: { // configuracion del servidor local
contentBase: resolve(__dirname, 'build'),
publicPath: '/'
}
}
module.export = config;