89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
| '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; |