responsive-social-buttons
Version:
Responsive social buttons with webpack.Easily customize it by tweaking a few variables. SVGs allow for tiny file size and retina support.
112 lines (107 loc) • 2.85 kB
JavaScript
let webpack = require('webpack');
let path = require('path');
let glob = require('glob');
let ExtractTextPlugin = require("extract-text-webpack-plugin");
let CleanWebpackPlugin = require('clean-webpack-plugin');
let imagemin = require('imagemin');
let imageminSvgo = require('imagemin-svgo');
let inProduction = (process.env.NODE_ENV === 'production');
module.exports = {
entry: {
"social-buttons": [
path.resolve(__dirname, 'resource/js/rrssb.js'),
path.resolve(__dirname, 'resource/scss/rrssb.scss')
]
},
output: {
path: path.resolve(__dirname, inProduction ? 'dist' : 'responsive-social-buttons/dist'),
filename: '[name].js' // [name] point to entry { app } value, chunkhash will give every file a unique hash
},
module: {
rules: [
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
use: ["css-loader"],
fallback: "style-loader"
})
},
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
//resolve-url-loader may be chained before sass-loader if necessary
use: ['css-loader', 'resolve-url-loader', 'sass-loader']
})
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
test: /\.(eot|ttf|woff|woff2)(\?[a-z0-9=&.]+)?$/,
loader: 'file-loader',
options: {
name: 'fonts/[name].[ext]'
}
},
{
test: /\.(png|jpe?g|gif|svg)$/,
loader: 'file-loader',
options: {
name: 'images/[name].[hash].[ext]'
}
}
]
},
devServer: {
hot: true,
// enable HMR on the server
contentBase: path.resolve(__dirname),
// match the output path
publicPath: '/'
// match the output `publicPath`
},
plugins: [
new ExtractTextPlugin("[name].css"), // extract css to file, [name] use entry file name
new webpack.LoaderOptionsPlugin({
minimize: inProduction
}),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: "jquery",
'window.$': 'jquery',
'window.jQuery': 'jquery'
}),
function() {
this.plugin('done', stats => {
imagemin(['icons/*.svg'], 'icons/compressed', {
use: [
imageminSvgo({
plugins: [
{removeViewBox: false}
]
})
]
}).then(() => {
console.log('Images optimized');
});
// for deploy github, remove useless folder
require('fs-extra').remove(path.resolve(__dirname, inProduction ? 'responsive-social-buttons' : 'dist'));
});
}
]
};
if (inProduction === true) {
module.exports.plugins.push(
new webpack.optimize.UglifyJsPlugin()
);
module.exports.plugins.push(
new CleanWebpackPlugin(['dist'], {
root: path.resolve(__dirname, !inProduction ? 'responsive-social-buttons' : ''),
verbose: true, // write logs to console
dry: false // emulate delete?
})
)
}