0

I am trying to implement SSR in React and I am using webpack and babel configuration.

webpack.shared.config.js

module.exports = {
  mode: "development",

  module: {
    rules: [
      {
        test: /\.js?$/,
        loader: "babel-loader",
        exclude: /node_modules/,
      },
    ],
  },

  resolve: {
    extensions: [".js", ".less"],
  },
};

webpack.client.config.js

const path = require("path");
const { merge } = require("webpack-merge");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const sharedConfig = require("./webpack.shared.config.js");

const clientPort = 8080;

const config = {
  target: "web",

  entry: "./src/browser/index.js",

  output: {
    path: path.join(__dirname, "./build/client"),
    filename: "scripts/bundle.js",
    publicPath: `http://localhost:${clientPort}/`,
  },

  devServer: {
    port: clientPort,
    liveReload: true,
  },

  module: {
    rules: [
      {
        test: /\.less$/,
        exclude: [
          /\.(js|jsx|mjs)$/,
          /\.html$/,
          /\.json$/,
          /\.(less|config|variables|overrides)$/,
        ],
        use: [
          MiniCssExtractPlugin.loader,
          {
            loader: "css-loader",
            options: {
              modules: {
                exportLocalsConvention: "camelCase",
                localIdentName: "[local]_[hash:base64:5]",
              },
            },
          },
          "less-loader",
        ],
      },
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.s[ac]ss$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
      },
    ],
  },

  plugins: [
    new MiniCssExtractPlugin({
      filename: "styles/bundle.css",
    }),
  ],
};

module.exports = merge(sharedConfig, config);

webpack.server.config.js

const path = require("path");
const webpackNodeExternals = require("webpack-node-externals");
const { merge } = require("webpack-merge");
const sharedConfig = require("./webpack.shared.config.js");

let config = {
  target: "node",

  entry: "./src/server/index.js",

  output: {
    path: path.join(__dirname, "./build/server"),
    filename: "bundle.js",
  },

  externals: [webpackNodeExternals()],

  module: {
    rules: [
      {
        test: /\.less$/,
        use: [
          {
            loader: "css-loader",
            options: {
              modules: {
                exportOnlyLocals: true,
                exportLocalsConvention: "camelCase",
                localIdentName: "[local]_[hash:base64:5]",
              },
            },
          },
        ],
      },
    ],
  },
};

module.exports = merge(sharedConfig, config);

And this are my scripts in package.json. I am using nodemon to run the server

  "scripts": {
    "clear": "rimraf build",
    "clear:server": "rimraf build/server",
    "build:client": "webpack --config webpack.client.config.js",
    "build:server": "webpack --config webpack.server.config.js",
    "start": "node build/server/bundle.js",
    "dev:client": "webpack serve --config webpack.client.config.js",
    "dev:server": "nodemon --watch client --watch server --exec 'run-s clear:server build:server start'",
    "dev": "run-p dev:client dev:server",
    "build": "run-s clear build:*"
  },

And this is my folder structure

enter image description here

I have added all the config and loaders properly but still getting the error

ERROR in ./src/styles/App.css 1:0 Module parse failed: Unexpected token (1:0) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders

Can anyone help me out ?

lazyCoder
  • 499
  • 1
  • 4
  • 17
  • Check this link: https://stackoverflow.com/questions/33469929/you-may-need-an-appropriate-loader-to-handle-this-file-type-with-webpack-and-b – Harry Jul 29 '22 at 08:59
  • Error: Plugin/Preset files are not allowed to export objects, only functions Getting this error now – lazyCoder Jul 29 '22 at 09:02

0 Answers0