Cargadores

Los cargadores de paquetes web se pueden configurar como “precargadores”, “cargadores” y “postcargadores”. Aunque no tienen por qué serlo, las configuraciones que usan linting u otras operaciones imperativas o en serie pueden aprovechar estas etapas de compilación en la canalización.

La clave para comprender los cargadores y su uso es que Webpack ejecutará cada módulo en el gráfico requerido a través del sistema del cargador. Siguiendo el ejemplo anterior, esto significa que a medida que Webpack comienza a rastrear las importaciones de su aplicación, identificará los archivos necesarios y, mediante una expresión regular simple, determinará qué archivo o tipo de archivo requiere qué cargador o serie de cargadores.

Arriba puede ver que todos los archivos “.js” o “.jsx” serán deslintados por eslint-loader en la fase de precargador. Otros tipos de archivos js|x también se ejecutarán a través del babel-loader en la fase del cargador principal. Además, en la misma fase, cualquier archivo .scss se cargará en el sass-loader. Esto le permite importar archivos Sass en sus módulos JS y enviarlos al paquete JS resultante o incluso a otro paquete CSS independiente (usando un complemento).

Nota: La importación de archivos .scss solo funcionará con Webpack y un cargador apropiado. Node no comprenderá este tipo de importación sin un preprocesador o transpilador.

También cabe destacar en el ejemplo .scss la capacidad de “encadenar” cargadores usando el signo de exclamación ! como un “tubo” entre diferentes cargadores. El ejemplo anterior canaliza la salida del “sass-loader” al “css-loader” y finalmente al “style-loader”. Esto también podría realizarse con una matriz de loaders: ['style-loader', 'css -cargador', 'sass-cargador']. También hay diferentes opciones disponibles para las definiciones del cargador en línea y siguen la sintaxis de consulta parámetro que se encuentra comúnmente en las URL.

Ver también: https://webpack.github.io/docs/loaders.html

Configuración usando preLoader para eslint, babel para jsx y encadenamiento del cargador css.

La siguiente configuración se puede usar como configuración base para agrupar su proyecto como una biblioteca. Observe cómo la configuración del módulo contiene una lista de precargadores y cargadores.

// webpack.config.js

var path = require('path');

module.exports = {
    entry: path.join(__dirname, '..', 'src/index.js'),
    output: {
        path: path.join(__dirname, '..', '/lib'),
        filename: outputFile,
        library: 'myCoolBundle.js',
        libraryTarget: 'umd',
        umdNamedDefine: true
    },
    module: {
        preLoaders: [
            {
                test: /(\.jsx|\.js)$/,
                loader: "eslint-loader",
                exclude: /node_modules/,
            }
        ],
        loaders: [
            {
                test: /(\.jsx|\.js)$/,
                loader: ['babel'],
                exclude: /(node_modules)/,
                include: path.join(__dirname, '..'),
                query: {
                    presets: [ 'es2015', 'react']
                }
            },
            {
                test: /\.scss$/,
                loaders: ["style-loader", "css-loader!sass-loader"]
            }
        ]
    },
    resolve: {
        root: path.resolve(__dirname, '..', './src'),
        extensions: ['', '.js', '.jsx', '.scss'],
        fallback: path.join(__dirname, '../node_modules')
    },
    eslint: {
        configFile: path.resolve(__dirname, '..', '.eslintrc'),
    }
};