-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwebpack.config.js
More file actions
110 lines (108 loc) · 3.45 KB
/
webpack.config.js
File metadata and controls
110 lines (108 loc) · 3.45 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
const path = require('path')
const webpack = require('webpack')
const createHash = require('hash-generator')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')
const WebpackShellPlugin = require('webpack-shell-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const ImageminPlugin = require('imagemin-webpack-plugin').default
const jsHash = createHash(10)
const cssHash = createHash(10)
module.exports = {
entry: {
bundle: './app/assets/scripts/main'
},
devtool: process.env.NODE_ENV === 'production' ? false : 'inline-source-map',
devServer: {
publicPath: '/',
contentBase: './dist',
hot: true
},
module: {
noParse: /(mapbox-gl)\.js$/,
loaders: [
{
test: /\.js$/,
loaders: [
'react-hot-loader',
'babel-loader'
],
exclude: /node_modules/
},
{
test: /\.scss$/,
use: ['css-hot-loader'].concat(ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
'css-loader?url=false',
`sass-loader?includePaths[]=${path.resolve(__dirname, 'node_modules/bourbon/app/assets/stylesheets')}`
]
}))
},
{
/* the "graphics" and "fonts" directories are copied explicitly,
* but are additionally siloed in their loaders so that SVGs
* referenced in code cannot be double-counted */
test: /\.(png|jpg|jpeg|gif|svg|ico)$/,
loader: 'file-loader?name=assets/graphics/[path][name].[ext]&context=app/assets/graphics',
exclude: path.resolve(__dirname, 'app/assets/fonts')
},
{
test: /\.(eot|svg|ttf|woff|woff2)$/,
loader: 'file-loader?name=assets/fonts/[path][name].[ext]&context=app/assets/fonts',
exclude: path.resolve(__dirname, 'app/assets/graphics')
}
]
},
plugins: [
new CleanWebpackPlugin('dist'),
new webpack.HotModuleReplacementPlugin(),
new ExtractTextPlugin(`assets/styles/main-${cssHash}.css`, {
allChunks: true,
disable: process.env.NODE_ENV !== 'production'
}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'app/index.html',
jsHash: jsHash,
cssHash: cssHash,
inject: false
}),
new ImageminPlugin({
test: 'assets/graphics/**',
gifsicle: {interlaced: true},
jpegtran: {progressive: true},
optipng: {optimizationLevel: 5},
svgo: {plugins: [{cleanupIDs: false}]},
disable: process.env.NODE_ENV !== 'production'
}),
new WebpackShellPlugin({
onBuildStart: [
'node_modules/collecticons-processor/bin/collecticons.js ' +
'compile ' +
'app/assets/graphics/collecticons ' +
'--font-embed ' +
'--font-dest app/assets/fonts ' +
'--font-name Collecticons ' +
'--font-types woff ' +
'--style-format sass ' +
'--style-dest app/assets/styles ' +
'--style-name collecticons ' +
'--class-name collecticon ' +
'--author-name Development Seed ' +
'--author-url https://developmentseed.org/ ' +
'--no-preview'
]
}),
new CopyWebpackPlugin([
{ from: 'README.md' },
{ from: 'robots.txt' },
{ from: 'share', to: 'share' }
])
],
output: {
filename: `assets/scripts/[name]-${jsHash}.js`,
path: path.resolve(__dirname, 'dist')
}
}