[go: up one dir, main page]

Skip to content

Latest commit

 

History

History
 
 

estatico-webpack

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

@unic/estatico-webpack

Uses Webpack with Babel to transpile and bundle JavaScript.

Installation

$ npm install --save-dev @unic/estatico-webpack

Usage

It is recommended to use the tools' default config files. Specifically, creating a webpack.config.js, .babelrc.js and .browserslistrc, possibly extending the default ones. This will make the configs more portable and make them usable outside of this task.

The webpack config needs to be passed to the task, babel and browserslist are picked up automagically if present. (This would allow you to skip the default config files and just pass your webpack config to the task directly, if you prefer this approach.)

const gulp = require('gulp');

/**
 * JavaScript bundling task
 * Uses Webpack with Babel to transpile and bundle JavaScript.
 *
 * Using `--watch` (or manually setting `env` to `{ watch: true }`) starts file watcher
 */
gulp.task('js', (cb) => {
  const task = require('@unic/estatico-webpack');
  const webpackConfig = require('./webpack.config.js');

  const instance = task(defaults => ({
    webpack: webpackConfig,
    logger: defaults.logger,
  }), env);

  return instance(cb);
});

webpack.config.js extending the default one:

const defaults = require('@unic/estatico-webpack/webpack.config.js');
const env = require('minimist')(process.argv.slice(2));
const merge = require('lodash.merge');
const path = require('path');

module.exports = merge({}, defaults, {
  entry: Object.assign({
    head: './src/assets/js/head.js',
    main: './src/assets/js/main.js',
  }, (env.dev || env.ci) ? {
    dev: './src/assets/js/dev.js',
  } : {}),
  output: {
    path: path.resolve('./dist/assets/js'),
    filename: `[name]${env.dev ? '' : '.min'}.js`,
    chunkFilename: `async/[name]${env.dev ? '' : '.min'}.js`,
    publicPath: '/assets/js/',
  },
  mode: env.dev ? 'development' : 'production',
});

.babelrc.js extending the default one:

module.exports = {
  extends: '@unic/estatico-webpack/.babelrc.js',
};

.browserslistrc:

> 1%

Run task (assuming the project's package.json specifies "scripts": { "gulp": "gulp" }): $ npm run gulp js

See possible flags specified above.

API

plugin(options, env) => taskFn

Options

webpack

Type: Object
Default:

{
  resolve: {
    alias: {
      handlebars: 'handlebars/runtime.js',
    },
  },
  module: {
    rules: [
      {
        test: /jquery\.js$/,
        loader: 'expose-loader?$!expose-loader?jQuery',
      },
      {
        test: /modernizrrc\.js$/,
        loader: 'expose-loader?Modernizr!webpack-modernizr-loader',
      },
      {
        test: /\.hbs$/,
        loader: 'handlebars-loader',
      },
      {
        test: /(\.js|\.jsx)$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          // See .babelrc.js
        },
      },
    ],
  },

  // Custom UglifyJS options
  optimization: {
    minimizer: [
      new UglifyJSPlugin({
        uglifyOptions: {
          mangle: {
            keep_fnames: true,
          },
        },
      }),
    ],
  },
  plugins: [
    new BundleAnalyzerPlugin({
      analyzerMode: 'static',
      // Path to bundle report file that will be generated in `static` mode.
      // Relative to bundles output directory.
      reportFilename: 'report.html',
      openAnalyzer: false,
      logLevel: 'warn',
    }),
    new UnminifiedWebpackPlugin(),
  ],
}

logger

Type: { info: Function, debug: Function, error: Function }
Default: Instance of estatico-utils's Logger utility.

Set of logger utility functions used within the task.

License

Apache 2.0.