-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathwebpack.config.js
More file actions
121 lines (117 loc) · 2.9 KB
/
webpack.config.js
File metadata and controls
121 lines (117 loc) · 2.9 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const fs = require('fs');
const path = require('path');
const env = require('yargs').argv.env;
const BannerWebpackPlugin = require('banner-webpack-plugin');
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
/* Common module loaders for all configuration objects */
const moduleLoaders = {
rules: [
{
test: /(\.jsx|\.js)$/,
exclude: /(node_modules)/,
use: [{
loader: 'babel-loader'
}, {
loader: 'eslint-loader'
}]
},
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: ['css-loader', 'sass-loader']
})
},
{
test: /\.js$|\.jsx$/,
use: {
loader: 'istanbul-instrumenter-loader',
options: {
esModules: true
}
},
enforce: 'post',
exclude: [/test/, /node_modules/, /examples/]
}
]
};
/* Configuration for bundling the core library */
const libConfig = {
entry: {
lib: [
path.resolve(__dirname, './src/index.js'),
path.resolve(__dirname, './src/styles/styles.scss')
]
},
devtool: 'inline-source-map',
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist'),
library: 'inveniographs',
libraryTarget: 'umd',
umdNamedDefine: true
},
externals: {
d3: 'd3',
lodash: '_',
'd3-tip': 'd3Tip',
'd3-svg-legend': 'legendColor'
},
watch: false,
module: moduleLoaders,
plugins: [
new FriendlyErrorsWebpackPlugin(),
new ExtractTextPlugin({
filename: 'styles.bundle.css'
}),
new UglifyJSPlugin(),
new BannerWebpackPlugin({
chunks: {
lib: {
beforeContent: `/* ${fs.readFileSync('./.license', 'utf8')} */`
}
}
})
]
};
/* Configuration for bundling the examples */
const examplesConfig = {
entry: {
bar: path.resolve(__dirname, './examples/bar/index.js'),
line: path.resolve(__dirname, './examples/line/index.js'),
groupedBar: path.resolve(__dirname, './examples/groupedBar/index.js')
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'examples/dist')
},
watch: false,
externals: {
d3: 'd3',
lodash: '_',
'd3-tip': 'd3Tip',
'd3-svg-legend': 'legendColor'
},
module: moduleLoaders,
plugins: [
new FriendlyErrorsWebpackPlugin(),
new BannerWebpackPlugin({
chunks: {
line: {
beforeContent: `/* ${fs.readFileSync('./.license', 'utf8')} */`
},
bar: {
beforeContent: `/* ${fs.readFileSync('./.license', 'utf8')} */`
}
}
})
]
};
/* Export the correct webpack configuration, based on env variable */
if (env === 'dev') {
module.exports = [libConfig];
} else if (env === 'examples') {
module.exports = [examplesConfig];
}