@jenssimon/webpack-config-sfcc
Version:
A shareable Webpack configuration for SFCC projects
47 lines • 1.92 kB
JavaScript
import webpack from 'webpack';
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
import CircularDependencyPlugin from 'circular-dependency-plugin';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import ESLintPlugin from 'eslint-webpack-plugin';
import RemoveEmptyScriptsPlugin from 'webpack-remove-empty-scripts';
import { FILE_EXTENSIONS } from '../constants.js';
const { HotModuleReplacementPlugin } = webpack;
/**
* The plugins configuration. (see https://webpack.js.org/configuration/plugins/)
*/
const plugins = (cartridge, {
/* cssEntryName, */ additionalPlugins, devServer, allowCircularDependendies, }) => [
// check case sensitive paths
new CaseSensitivePathsPlugin(),
// check for circular dependencies
new CircularDependencyPlugin({
exclude: /node_modules/, // exclude detection of files based on a RegExp
failOnError: !allowCircularDependendies, // add errors to webpack instead of warnings
cwd: process.cwd(), // set the current working directory for displaying module paths
}),
// Extract CSS files from JS bundle
new MiniCssExtractPlugin({
filename: (pathData) => {
const returnValue = '../css/[name].css';
const cssPostfix = '-css';
return pathData.chunk?.name?.endsWith(cssPostfix)
? returnValue.replace('[name]', pathData.chunk.name.slice(0, -cssPostfix.length))
: returnValue;
},
// chunkFilename: '../css/[name].css',
}),
new RemoveEmptyScriptsPlugin({}),
// Use Webpack to lint files
new ESLintPlugin({
extensions: FILE_EXTENSIONS,
fix: true,
lintDirtyModulesOnly: true,
}),
...additionalPlugins,
// HMR support for dev server
...devServer ? [
new HotModuleReplacementPlugin(),
] : [],
];
export default plugins;
//# sourceMappingURL=plugins.js.map