Template Basico Webpack + Babel + SASS
Inicializamos un protecto
$ mkdir webpack-template
$ cd webpack-template
$ npm init -y
Instalamos dependencias
Las dependencias que utilizaremos son
- babel-core 6.26.3
- babel-loader 7.1.5
- babel-preset-es2015 6.24.1
- css-loader 1.0.0”,
- mini-css-extract-plugin 0.4.1
- node-sass 4.9.2
- path 0.12.7
- sass-loader 7.1.0
- style-loader 0.21.0
- webpack 4.16.4
- webpack-cli 3.1.0
Creamos el archivo de configuracion
La configuración esta definida en el archivo webpack.config.js
Configuracion básica
La configuración basica solo agrega configuracion para generar un bundle para Javascript
const path = require('path');
module.exports = {
entry: path.resolve(__dirname, 'src/js/index.js'),
output: {
filename: 'app.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test:/\.js$/,
}
]
}
};
Agregamos babel
Para poder escribir ES7 y todos los navegadores puedan leer el Javascript
...
module.exports = {
module: {
rules: [
{
test:/\.js$/,
use: {
loader: 'babel-loader',
options: {
presets: ['es2015']
}
}
},
]
},
};
Agregamos SASS como preprocesador de estilos
const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
process.env.NODE_ENV !== 'production' ? 'style-loader' : MiniCssExtractPlugin.loader,
"css-loader",
"sass-loader"
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: "[name].css",
chunkFilename: "[id].css"
})
]
};
Agregamos la tarea al archivo package.json
...
"scripts": {
"build": "webpack --mode=development",
},
...
Ahora la estructura de archivos
├── package.json
├── src
│ ├── html
│ │ └── index.html
│ ├── js
│ │ ├── app.js
│ │ └── index.js
│ └── sass
│ └── styles.scss
└── webpack.config.js
index.html
<!doctype html>
<html>
<head>
<title>Getting Started</title>
<script src="https://unpkg.com/lodash@4.16.6"></script>
</head>
<body>
<script src="../../dist/app.js"></script>
</body>
</html>
app.js
class App {
constructor(){
const element = document.createElement('h1');
element.innerHTML='Wellcome to WebPack';
document.body.appendChild(element);
}
}
export default App;
index.js
import '../sass/styles.scss'
import App from './app.js'
const a= new App()
styles.scss
$font-color: #121212;
$font-inverse-color: #F2F2F2;
$color-background-color: #0BC8FF;
body{
background-color: $color-background-color;
}
h1{
text-align: center;
color: $font-inverse-color;
}