@eterna/webpack-config-react

0.2.0 • Public • Published

Eterna Webpack Config for React Projects

Installation

npm i --save-dev @eterna/webpack-config-react @eterna/webpack-config-javascript

Or with TypeScript:

npm i --save-dev @eterna/webpack-config-react @eterna/webpack-config-typescript

Usage

Example webpack.config.mjs

import configJavascript from "@eterna/webpack-config-javascript";
import configReact from "@eterna/webpack-config-react";
import path from "path";
import { mergeWithRules } from "webpack-merge";

const mergeConfig = {
  entry: path.resolve("./src/index.jsx"),
};

export default (env, argv) =>
  mergeWithRules(configJavascript.configBase.mergeRules)(
    configJavascript.config(env, argv),
    configReact.config(env, argv),
    mergeConfig
  );

Or with TypeScript:

import configTypescript from "@eterna/webpack-config-typescript";
import configReact from "@eterna/webpack-config-react";
import path from "path";
import { mergeWithRules } from "webpack-merge";

const mergeConfig = {
  entry: path.resolve("./src/index.tsx"),
};

export default (env, argv) =>
  mergeWithRules(configTypescript.configBase.mergeRules)(
    configTypescript.config(env, argv),
    configReact.config(env, argv),
    mergeConfig
  );

Or with some overrides:

import HtmlWebPackPlugin from "html-webpack-plugin";
import configJavascript from "@eterna/webpack-config-javascript";
import { merge } from "webpack-merge";

const entry = {
  main: "./src/index.js",
  about: "./src/about/about.js",
  contact: "./src/contact/contact.js",
};

const configJavascriptOverride = (env, argv) => ({
  ...configJavascript.config(env, argv),
  plugins: [
    ...Object.keys(entry).map((page) => {
      return new HtmlWebPackPlugin({
        chunks: [page],
        filename: page === "main" ? "index.html" : `${page}/index.html`,
      });
    }),
    configJavascript.configBase.defaultMiniCssExtractPlugin,
  ],
});

const mergeConfig = {
  entry,
  output: {
    filename: (pathData) => {
      return pathData.chunk.name === "main" ? "[name].js" : "[name]/[name].js";
    },
  },
};

export default (env, argv) =>
  merge(configJavascriptOverride(env, argv), mergeConfig);

Readme

Keywords

none

Package Sidebar

Install

npm i @eterna/webpack-config-react

Weekly Downloads

0

Version

0.2.0

License

MIT

Unpacked Size

6.59 kB

Total Files

5

Last publish

Collaborators

  • nickstaroba