const HtmlWebpackPlugin = require('html-webpack-plugin');
const pkg = require('./package.json');
const webpack = require('webpack');
const path = require('path');
const fs = require('fs');
const rootDir = path.resolve(__dirname);
let plugins = [];
module.exports = env => {
const name = pkg.name;
const isProd = env === 'prod';
const output = {
path: path.join(__dirname),
filename: 'dist/grapes.min.js',
library: name,
libraryExport: 'default',
libraryTarget: 'umd',
};
if (isProd) {
plugins = [
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.BannerPlugin(`${name} - ${pkg.version}`),
];
} else if (env === 'dev') {
output.filename = 'dist/grapes.js';
} else {
const index = 'index.html';
const indexDev = `_${index}`;
const template = fs.existsSync(indexDev) ? indexDev : index;
plugins.push(new HtmlWebpackPlugin({ template, inject: false }));
}
return {
entry: './src',
output: output,
plugins: plugins,
mode: isProd ? 'production' : 'development',
devtool: isProd ? 'source-map' : (!env ? 'cheap-module-eval-source-map' : false),
devServer: {
headers: { 'Access-Control-Allow-Origin': '*' },
disableHostCheck: true,
},
module: {
rules: [{
test: /\/index\.js$/,
loader: 'string-replace-loader',
query: {
search: '<# VERSION #>',
replace: pkg.version
}
}, {
test: /\.js$/,
loader: 'babel-loader',
include: /src/,
options: { cacheDirectory: true },
}],
},
resolve: {
modules: ['src', 'node_modules'],
alias: {
jquery: 'cash-dom',
backbone: `${rootDir}/node_modules/backbone`,
underscore: `${rootDir}/node_modules/underscore`,
}
}
};
}