Socket
Socket
Sign inDemoInstall

webpack-simple

Package Overview
Dependencies
129
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    webpack-simple

Webpack Config - Simple defaults, extendable options


Version published
Weekly downloads
20
Maintainers
1
Install size
9.62 kB
Created
Weekly downloads
 

Changelog

Source

1.7.11 (2022-12-07)

Chore

  • Bump qs from 6.5.2 to 6.5.3

Readme

Source

Webpack Simple

Generates a webpack config with simple defaults and extendable options.

Build Status Coverage Status npm

Installation

Install as a dev dependency:

npm i -D webpack-simple

Basic Usage

Webpack is great, but the configuration is verbose. Webpack 4 improved things with a config-less setup, but as soon as you want something beyond the defaults you need an entire config. This package aims to give you the best of both worlds: a simple config, with the ability to configure just the parts you want.

// webpack.config.js
const { makeWebpackConfig } = require('webpack-simple');
module.exports = makeWebpackConfig();

That's it!

This will generate a webpack config in development mode, with Babel/React and css/sass loaders. It's the equivalent of:

const config = {
  mode: 'development',
  target: 'web',
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: [/.json$/, /node_modules/],
        use: [
          {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env', '@babel/preset-react'],
              plugins: ['@babel/plugin-proposal-class-properties'],
            },
          },
        ],
      },
      {
        test: /\.s?css$/,
        use: [
          { loader: 'style-loader' },
          { loader: 'css-loader', options: { modules: true } },
          { loader: 'sass-loader' },
        ],
      },
    ],
  },
};

It's easy to add custom configuration:

const productionConfig = makeWebpackConfig({ mode: 'production' });
const nodeTargeted = makeWebpackConfig({ target: 'node' });
const otherEntryAndOutput = makeWebpackConfig({
  entry: './index.js',
  output: {
    path: path.join(__dirname, 'public'),
    file: 'bundle.js',
  },
});

You can add or overwrite entire module rules:

const { defaultWebpackRules } = require('webpack-simple');

const noBabelReactCSS = makeWebpackConfig({ rules: [] });
const includeOtherRules = makeWebpackConfig({
  rules: [...defaultWebpackRules, ...otherRules],
});

...or keep the above rules and just add/modify the default JS/CSS loaders:

const { makeJS, makeCSS } = require('webpack-simple');

const use = [{ loader: 'other-loader', options: { foo: 'bar' } }];

const js = makeJS({ use });
const css = makeCSS({ use });

const customJSConfig = makeWebpackConfig({ js });
const customCSSConfig = makeWebpackConfig({ css });

By default, makeJS and makeCSS will return the JS/CSS rules in the config above.

makeJS allows you to modify/override use, exclude, babelPresets, and babelPlugins.

const customJS = makeJS({ exclude: /testing/, babelPresets: 'some-preset' });

// customJS returns:
// {
//   test: /\.jsx?$/,
//   exclude: [/testing/],
//   use: [
//     {
//       loader: 'babel-loader',
//       options: {
//         presets: ['some-preset'],
//         plugins: ['@babel/plugin-proposal-class-properties'],
//       },
//     },
//   ],
// }

makeCSS allows you to modify/override use, cssLoaderOptions, and sassLoaderOptions.

const customCSS = makeCSS({ cssLoaderOptions: { foo: 'bar' } });

// customCSS returns:
// {
//   test: /\.s?css$/,
//   use: [
//     { loader: 'style-loader' },
//     { loader: 'css-loader', options: { foo: 'bar' } },
//     { loader: 'sass-loader' },
//   ],
// }

The full config input options with defaults:

makeWebpackConfig({
  js, // Defaults to JS rule above
  css, // Defaults to CSS rule above
  rules, // Defaults to rules above
  target = 'web',
  mode = 'development',

  // All top-level webpack config options are available
  // as input options (all default to undefined):

  node,
  entry, // Falls back to Webpack's default: '/src/index.js'
  output, // Falls back to Webpack's default '/dist/main.js'
  serve,
  stats,
  watch,
  devtool,
  resolve,
  plugins,
  externals,
  devServer,
  performance,
  experiments,
  watchOptions,
  optimization,
});

The full list of module exports:

module.exports = {
  makeWebpackConfig,
  makeJS,
  makeCSS,

  // Defaults provided so you can overwrite parts of them
  defaultWebpackRules,
  defaultBabelPlugins,
  defaultBabelPresets,
  defaultJSExclude,
  defaultJSUse,
  defaultCSSLoaderOptions,
  defaultCSSUse,
};

Keywords

FAQs

Last updated on 08 Dec 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc