Front-end Notes
  • Introduction
  • Inbox
  • Git
  • Notes: Frontend
    • Vue JS
    • webpack
  • Notes: Backend
  • Database
  • Redux
  • Testing
    • Unit Testing
      • How to Test Asynchronous Request in React
  • C#
    • Subjects
      • Interfaces
      • Attributes
      • Modifiers
    • Notes
    • Unit Testing
Powered by GitBook
On this page
  • Core Concepts:
  • Example:
  • Basic Setup for SCSS & Babel
  • Resources:

Was this helpful?

  1. Notes: Frontend

webpack

PreviousVue JSNextNotes: Backend

Last updated 5 years ago

Was this helpful?

webpack is an open-source JavaScript module bundler. It is a module bundler primarily for JavaScript, but it can transform front-end assets like HTML, CSS, and images if the corresponding loaders are included. webpack takes modules with dependencies and generates static assets representing those modules.

Core Concepts:

  • entry

  • output

  • loaders/modules

    • Apply one or more loaders to all files in the same file extension type, i.e. .css, .scss

  • plugins

Example:

var HtmlwebpackPlugin = require('html-webpack-plugin');
var UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');
var CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');

module.exports = {
    entry: {
        vendor: ['babel-polyfill', 'lodash'],
        main: './src/main.js'
    },
    output: {
        path: './dist',
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.jsx?$/, loader: 'babel-loader', exclude: /node_modules/,
                options: { plugins: ['transform-runtime'], presets: ['es2015'] }
            },
            { test: /\.hbs$/, loader: 'handlebars-loader' }
        ]
    },
    plugins: [
        new HtmlwebpackPlugin({
            title: 'Intro to webpack',
            template: 'src/index.html'
        }),
        new UglifyJsPlugin({
            beautify: false,
            mangle: { screw_ie8 : true },
            compress: { screw_ie8: true, warnings: false },
            comments: false
        }),
        new CommonsChunkPlugin({
            name: "vendor",
            filename: "vendor.bundle.js"
        })
    ]
};

Basic Setup for SCSS & Babel

Install packages for using SCSS:

npm install sass-loader node-sass css-loader extract-text-webpack-plugin

extract-text-webpack-plugin is a plugin to extract css codes and create a separate file, i.e. main.css

Install packages for using Babel, to compile ES6+ to browser-compatible JavaScript:

npm install babel-core babel-loader babel-preset-es2015

webpack.config.js

var path = require('path');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

var extractPlugin = new ExtractTextPlugin({
   filename: 'main.css'
});

module.exports = {
    entry: './src/js/app.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js',
        publicPath: '/dist'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                use: [
                    {
                        loader: 'babel-loader',
                        options: {
                            presets: ['es2015']
                        }
                    }
                ]
            },
            {
                test: /\.scss$/,
                use: extractPlugin.extract({
                    use: ['css-loader', 'sass-loader']
                })
            }
        ]
    },
    plugins: [
        extractPlugin
    ]
};

Resources:

    • webpack 2 is outdated, but the concept was explained well

(Video)

Webpack - A Detailed Introduction
WHAT IS WEBPACK, HOW DOES IT WORK? | Webpack 2 Basics Tutorial