217 lines
4.5 KiB
JavaScript
217 lines
4.5 KiB
JavaScript
/**
|
|
* Created by andrew on 8/18/16.
|
|
*/
|
|
const webpack = require('webpack');
|
|
const CleanWebpackPlugin = require('clean-webpack-plugin');
|
|
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
|
const PurifyCSSPlugin = require('purifycss-webpack-plugin');
|
|
|
|
exports.devServer = function(options) {
|
|
return {
|
|
entry: {
|
|
'webpack-dev-server': 'webpack-dev-server/client?http://localhost:8080',
|
|
hmr: 'webpack/hot/only-dev-server'
|
|
},
|
|
devServer: {
|
|
contentBase: './build',
|
|
hot: true,
|
|
historyApiFallback: true,
|
|
inline: true,
|
|
stats: 'errors-only',
|
|
host: options.host, // Defaults to `localhost`
|
|
port: options.port, // Defaults to 8080
|
|
proxy: {
|
|
'/api*' : {
|
|
target: 'http://localhost:8080'
|
|
}
|
|
// '/user*' : {
|
|
// target: 'http://localhost:8080'
|
|
// },
|
|
// '/login' : {
|
|
// target: 'http://localhost:8080'
|
|
// },
|
|
// '/customers*' : {
|
|
// target: 'http://localhost:8080'
|
|
// },
|
|
// '/accounts*' : {
|
|
// target: 'http://localhost:8080'
|
|
// },
|
|
// '/transfers*' : {
|
|
// target: 'http://localhost:8080'
|
|
// }
|
|
}
|
|
},
|
|
watchOptions: {
|
|
// Delay the rebuild after the first change
|
|
aggregateTimeout: 300,
|
|
// Poll using interval (in ms, accepts boolean too)
|
|
poll: 1000
|
|
},
|
|
plugins: [
|
|
// Enable multi-pass compilation for enhanced performance
|
|
// in larger projects. Good default.
|
|
new webpack.HotModuleReplacementPlugin({
|
|
multiStep: true
|
|
})
|
|
]
|
|
|
|
};
|
|
};
|
|
|
|
exports.setupCSS = function(paths) {
|
|
return {
|
|
module: {
|
|
loaders: [
|
|
{
|
|
test: /\.css$/,
|
|
loaders: ['style', 'css'],
|
|
include: paths
|
|
}
|
|
]
|
|
}
|
|
};
|
|
};
|
|
|
|
exports.setupLess = function(paths) {
|
|
return {
|
|
module: {
|
|
loaders: [
|
|
{
|
|
test: /\.(le)|(c)ss$/,
|
|
loaders: ['style', 'css', 'less'],
|
|
include: paths
|
|
}
|
|
]
|
|
}
|
|
};
|
|
};
|
|
|
|
exports.useJSON = function() {
|
|
return {
|
|
module: {
|
|
loaders: [
|
|
{
|
|
test: /\.json$/,
|
|
loaders: ['json']
|
|
}
|
|
]
|
|
}
|
|
};
|
|
};
|
|
|
|
exports.minify = function() {
|
|
return {
|
|
plugins: [
|
|
new webpack.optimize.UglifyJsPlugin({
|
|
compress: {
|
|
warnings: false
|
|
}
|
|
})
|
|
]
|
|
};
|
|
};
|
|
|
|
exports.extractBundle = function(options) {
|
|
const entry = {};
|
|
entry[options.name] = options.entries;
|
|
|
|
return {
|
|
// Define an entry point needed for splitting.
|
|
entry: entry,
|
|
plugins: [
|
|
// Extract bundle and manifest files. Manifest is
|
|
// needed for reliable caching.
|
|
new webpack.optimize.CommonsChunkPlugin({
|
|
names: [options.name, 'manifest']
|
|
})
|
|
]
|
|
};
|
|
};
|
|
|
|
exports.clean = function(path) {
|
|
return {
|
|
plugins: [
|
|
new CleanWebpackPlugin([path], {
|
|
// Without `root` CleanWebpackPlugin won't point to our
|
|
// project and will fail to work.
|
|
root: process.cwd()
|
|
})
|
|
]
|
|
};
|
|
};
|
|
|
|
|
|
exports.extractCSS = function(paths) {
|
|
return {
|
|
module: {
|
|
loaders: [
|
|
// Extract CSS during build
|
|
{
|
|
test: /\.css$/,
|
|
// loaders: ['style', 'css'],
|
|
loader: ExtractTextPlugin.extract('style', 'css'),
|
|
include: paths
|
|
}
|
|
]
|
|
},
|
|
plugins: [
|
|
// Output extracted CSS to a file
|
|
new ExtractTextPlugin('[name].[chunkhash].css')
|
|
]
|
|
};
|
|
};
|
|
|
|
exports.extractLESS = function(paths) {
|
|
return {
|
|
module: {
|
|
loaders: [
|
|
// Extract CSS during build
|
|
{
|
|
test: /\.(le)|(c)ss$/,
|
|
// loaders: ['style', 'css', 'less'],
|
|
loader: ExtractTextPlugin.extract(
|
|
"style-loader",
|
|
'css?sourceMap!' +
|
|
'less?sourceMap'
|
|
),
|
|
include: paths
|
|
}
|
|
]
|
|
},
|
|
plugins: [
|
|
// Output extracted CSS to a file
|
|
new ExtractTextPlugin('[name].[chunkhash].css')
|
|
]
|
|
};
|
|
};
|
|
|
|
exports.purifyCSS = function(paths) {
|
|
return {
|
|
plugins: [
|
|
new PurifyCSSPlugin({
|
|
basePath: process.cwd(),
|
|
// `paths` is used to point PurifyCSS to files not
|
|
// visible to Webpack. You can pass glob patterns
|
|
// to it.
|
|
paths: paths,
|
|
purifyOptions: {
|
|
// minify: false,
|
|
// info: true,
|
|
// output: './output.css'
|
|
}
|
|
})
|
|
]
|
|
}
|
|
};
|
|
|
|
exports.useJQuery = function() {
|
|
return {
|
|
plugins: [
|
|
new webpack.ProvidePlugin({
|
|
$: "jquery",
|
|
jQuery: "jquery"
|
|
})
|
|
]
|
|
};
|
|
|
|
}; |