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