Files
car-fetcher/frontend/webpack/webpack.dev.js
2020-05-25 16:07:30 +03:00

93 lines
2.6 KiB
JavaScript

/* eslint-disable import/no-extraneous-dependencies */
const { HotModuleReplacementPlugin } = require('webpack');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');
const commonPaths = require('./paths');
module.exports = {
devtool: 'cheap-eval-source-map',
output: {
filename: '[name].js',
path: commonPaths.outputPath,
chunkFilename: '[name].js',
},
module: {
rules: [
{
test: /\.(js|jsx)$/, // allows both .jsx and .js
exclude: /node_modules/,
include: commonPaths.source,
loader: 'babel-loader',
options: {
cacheDirectory: true,
plugins: ['react-hot-loader/babel'],
},
},
{
test: /\.(sa|sc|c)ss$/,
use: [{
loader: 'style-loader',
},
{
loader: 'css-loader',
options: {
modules: false,
},
},
{
loader: 'sass-loader',
},
],
},
],
},
devServer: {
contentBase: commonPaths.outputPath,
compress: true,
hot: true,
port: 3001,
},
plugins: [
new HotModuleReplacementPlugin(),
new HardSourceWebpackPlugin({
// Either an absolute path or relative to webpack's options.context.
cacheDirectory: commonPaths.cachePath,
// Either a string of object hash function given a webpack config.
// node-object-hash on npm can be used to build this.
configHash: (webpackConfig) => require('node-object-hash')({ // eslint-disable-line
sort: false,
}).hash(webpackConfig),
// Either false, a string, an object, or a project hashing function.
environmentHash: {
root: process.cwd(),
directories: [],
files: [
// Cache will get an unique hash based on those files
// if either of them changes, new cache must be generated
'package-lock.json',
'.babelrc.js',
],
},
info: {
mode: 'none',
level: 'debug',
},
// Clean up large, old caches automatically.
cachePrune: {
// Caches younger than `maxAge` are not considered for deletion.
// They must be at least this old in milliseconds.
maxAge: 3 * 60 * 60 * 1000, // 3 hours
// All caches together must be larger than `sizeThreshold` before any
// caches will be deleted.
// Together they must be at least this big in bytes.
sizeThreshold: 50 * 1024 * 1024, // 50 MB
},
}),
new BundleAnalyzerPlugin({
analyzerPort: 8888,
openAnalyzer: false,
}),
],
};