I started the project and configured webpack, but after running command "yarn start" I get the following error:
$ webpack-dev-server --mode=development
[webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
- configuration.module.rules[2] should be one of these:
["..." | object { assert?, compiler?, dependency?, descriptionData?, enforce?, exclude?, generator?, include?, issuer?, issuerLayer?, layer?, loader?, mimetype?, oneOf?, options?, parser?, realResource?, resolve?, resource?, resourceFragment?, resourceQuery?, rules?, scheme?, sideEffects?, test?, type?, use? }, ...]
-> A rule.
Details:
- configuration.module.rules[2].loader should be a non-empty string. -> A loader request.
webpack.config.js:
const { merge } = require("webpack-merge");
const commonConfiguration = require("./webpack/common");
module.exports = (_env, { mode }) => {
const properlyConfig = require(`./webpack/${mode}`);
const mergedConfig = merge(commonConfiguration, properlyConfig);
return mergedConfig;
};
common.js:
const path = require("path").resolve;
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
entry: {
index: path(__dirname, "..", "src", "index.js"),
},
output: {
filename: "[name].[contenthash:6].js",
path: path(__dirname, "..", "build"),
},
resolve: {
extensions: [".js", ".jsx"],
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
},
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: path(__dirname, "..", "public", "index.html"),
}),
],
};
development.js:
module.exports = {
devServer: {
contentBase: "./public",
port: 3000,
},
devtool: "inline-source-map",
module: {
rules: [
{
test: /\.module\.s(a|c)ss$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
modules: {
localIdentName: "[local]",
},
},
},
{
loader: "sass-loader",
options: {
sourceMap: true,
},
},
],
},
{
test: /\.(s(a|c)ss|css)$/,
exclude: /\.module\.(s(a|c)ss)$/,
loader: [
"style-loader",
"css-loader",
{
loader: "sass-loader",
options: {
sourceMap: true,
},
},
],
},
],
},
};
production.js:
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin");
module.exports = {
optimization: {
minimizer: [new OptimizeCssAssetsWebpackPlugin({})],
},
module: {
rules: [
{
test: /\.module\.(s(a|c)ss)$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
modules: {
localIdentName: "[local]",
},
},
},
{
loader: "sass-loader",
options: {
sourceMap: true,
},
},
],
},
{
test: /\.(s(a|c)ss|css)$/,
exclude: /\.module\.(s(a|c)ss)$/,
loader: [
MiniCssExtractPlugin.loader,
"css-loader",
{
loader: "sass-loader",
options: {
sourceMap: true,
},
},
],
},
],
},
plugins: [
new CleanWebpackPlugin(),
new MiniCssExtractPlugin({
filename: "style.[contenthash:6].css",
chunkFilename: "style.[contenthash:6].css",
publicPath: "./",
}),
],
};