escape-button-js
Version:
Open source widget to help users quickly and discretely leave your website
138 lines (125 loc) • 2.63 kB
JavaScript
/**
* Requires
*/
// Modules
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const dotenv = require('dotenv').config();
// Package
const Package = require('./package.json');
/**
* Environment
*/
dotenv.parsed.PACKAGE_VERSION = Package.version;
const isEnvDevelopment = process.env.NODE_ENV === 'development';
/**
* Options
*/
const htmlMinificationOptions = {
removeComments: true,
collapseWhitespace: true,
useShortDoctype: true,
removeRedundantAttributes: false,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
processScripts: ['application/ld+json']
};
/**
* Configuration
*/
const buildConfiguration = function (target) {
// Build configuration
const configuration = {
mode: isEnvDevelopment ? 'development' : 'production',
entry: {
index: `${__dirname}/src/js/index.js`,
},
output: {
path: `${__dirname}/dist/`,
filename: (isEnvDevelopment) ? `[name].${target}.min.js` : `[name].${target}.min.js`,
publicPath: '/public/',
library: {
name: 'EscapeButton',
type: target
}
},
...(!isEnvDevelopment ? {
devtool: 'source-map',
} : undefined),
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader',
'css-loader']
},
{
test: /\.(gif|png|jpg|ico)$/,
use: {
loader: 'url-loader'
}
},
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: [
['@babel/preset-env',
{
useBuiltIns: 'usage',
corejs: 3,
modules: 'commonjs',
}
]
]
},
},
},
],
},
plugins: [
new webpack.DefinePlugin({
'process.env': JSON.stringify({
PACKAGE_VERSION: Package.version
}),
}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'src/views/index.html',
inject: false,
minify: !isEnvDevelopment ? htmlMinificationOptions : false
})
].filter(Boolean),
resolve: {
fallback: {
fs: false,
tls: false,
net: false,
path: false,
zlib: false,
http: false,
https: false,
stream: false,
crypto: false,
util: require.resolve('util/'),
os: require.resolve('os-browserify/browser'),
'crypto-browserify': require.resolve('crypto-browserify')
}
}
};
// Return config
return configuration;
};
/**
* Exports
*/
module.exports = [
buildConfiguration('var'),
buildConfiguration('commonjs2')
];