| 'use strict'; |
| |
| const path = require('path'); |
| const webpack = require('webpack'); |
| const MiniCssExtractPlugin = require('mini-css-extract-plugin'); |
| |
| const devMode = process.env.NODE_ENV !== 'production' |
| |
| function getHotCSS(bundle, devMode) { |
| if(!devMode) { |
| return bundle; |
| } |
| return [ |
| 'css-hot-loader', |
| ].concat(bundle); |
| } |
| |
| const prod = { |
| mode: devMode ? 'development' : 'production', |
| devtool: devMode ? 'cheap-module-source-map' : 'source-map', |
| entry: [ |
| './ekko-lightbox.js', |
| './ekko-lightbox.less' |
| ], |
| output: { |
| path: path.resolve(__dirname, 'dist'), |
| filename: devMode ? '[name].js' : 'ekko-lightbox.js' |
| }, |
| module: { |
| rules: [{ |
| test: /\.less$/, |
| use: getHotCSS([ |
| MiniCssExtractPlugin.loader, |
| { loader: 'css-loader', options: { sourceMap: true } }, |
| { |
| loader: 'postcss-loader', |
| options: { |
| ident: 'postcss', |
| sourceMap: true, |
| plugins: (loader) => [ |
| require('autoprefixer')({ |
| browsers: ['last 2 versions'] |
| }), |
| require('cssnano')() |
| ] |
| } |
| }, |
| { loader: 'less-loader', options: { sourceMap: true } } |
| ], devMode) |
| }, |
| { |
| test: /\.js$/, |
| exclude: /(node_modules|bower_components)/, |
| use: { |
| loader: 'babel-loader', |
| options: { |
| presets: [require('babel-preset-env')] |
| } |
| } |
| }] |
| }, |
| plugins: [ |
| new MiniCssExtractPlugin({ |
| filename: devMode ? '[name].css' : 'ekko-lightbox.css' |
| }) |
| ], |
| }; |
| |
| if (!devMode) { |
| prod.plugins.push( |
| new webpack.BannerPlugin({ |
| banner: |
| 'Lightbox for Bootstrap by @ashleydw\n' + |
| 'https://github.com/ashleydw/lightbox\n' + |
| '\n' + |
| 'License: https://github.com/ashleydw/lightbox/blob/master/LICENSE\n', |
| entryOnly: true, |
| include: 'ekko-lightbox.js' |
| }) |
| ); |
| } else { |
| prod.entry.push('./index.html'); |
| prod.module.rules.push({ |
| test: /\.html$/, |
| use: "raw-loader" |
| }); |
| } |
| |
| module.exports = prod; |