compolicious
Version:
React component demo utility
91 lines (86 loc) • 2.36 kB
JavaScript
var path = require('path');
var webpack = require('webpack');
var flow = require('lodash/fp/flow');
var compact = require('lodash/fp/compact');
var uniq = require('lodash/fp/uniq');
var map = require('lodash/fp/map');
var CopyWebpackPlugin = require('copy-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var HtmlWebpackIncludeAssetsPlugin = require('html-webpack-include-assets-plugin');
var babelRc = require('./.babelrc');
module.exports = function (options) {
options = options || {};
return {
entry: {
bundle: [
'webpack-dev-server/client',
'webpack/hot/dev-server',
options.mainEntry
]
},
output: {
filename: '[name].[hash].js',
sourceMapFilename: '[name].[hash].js.map',
path: path.resolve(__dirname, 'lib'),
publicPath: '/'
},
resolve: {
extensions: ['.js', '.jsx'],
alias: {
'/src': path.resolve(__dirname, 'src')
}
},
module: {
rules: [{
test: /\.(ttf|eot|woff|woff2)$/,
use: {
loader: "file-loader",
options: {
name: "fonts/[name].[ext]"
}
}
}, {
test: /\.css\.js$/,
loader: ['style-loader', 'css-loader?modules', 'css-js-loader', 'value-loader']
}, {
test: /\.css$/,
loader: ['style-loader', 'css-loader']
}, {
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: babelRc
}
}]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new CopyWebpackPlugin(flow([
function (assets) {
return assets.concat(map(function (asset) {
if (asset.toServer) {
return {
from: asset.from,
to: path.resolve(__dirname, 'lib' + asset.toServer)
};
} else {
return asset;
}
})(options.copyAssets || []));
},
compact,
uniq
])([{
from: 'node_modules/@babel/standalone/babel.min.js'
}])),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'src', 'index.html')
}),
new HtmlWebpackIncludeAssetsPlugin({
assets: ['babel.min.js'],
append: true
})
]
};
}