-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwebpack.config.js
59 lines (53 loc) · 1.63 KB
/
webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
* @file webpack configuration.
* @author Simon Finney <[email protected]>
*/
const CleanPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlPlugin = require('html-webpack-plugin');
const path = require('path');
const { name } = require('./package.json');
// Entry point.
const entry = 'index';
/**
* Creates an object for maintaining paths throughout the webpack configuration.
*/
const paths = new function paths() {
this.src = path.resolve(__dirname, 'src');
this.dist = path.resolve(__dirname, 'dist');
}();
/**
* Exports the webpack configuration for the library.
* @param {Object.<string, boolean>} env Environment variables defined in the package manifest.
*/
module.exports = ({ development } = false) => ({
devtool: development && 'cheap-module-eval-source-map',
entry: development && [paths.src, path.resolve(paths.src, `${entry}.scss`)],
module: {
rules: [
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: ['css-loader', 'postcss-loader', 'sass-loader'],
}),
},
],
},
output: {
filename: `${name}.js`,
library: name
.split('-')
.map(str => `${str.charAt(0).toUpperCase()}${str.slice(1)}`)
.join(''), // Converts the package name to uppercase to expose public methods from.
},
plugins: [
new CleanPlugin([paths.dist]),
new ExtractTextPlugin(`${entry}.css`),
development &&
new HtmlPlugin({
template: path.resolve(paths.src, `${entry}.html`),
title: name,
}),
].filter(Boolean),
});