# webpack-config

> Helps to load, extend and merge webpack configs

Latest version **7.5.0** (published 2017-10-17) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install webpack-config
pnpm add webpack-config
yarn add webpack-config
bun add webpack-config
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 7.5.0 |
| Published | 2017-10-17 |
| First published | 2015-10-19 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=6.0.0 |
| Dependencies | 5 |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 255 |
| Author | Marat Dreizin |
| Maintainers | mdreizin |
| Keywords | webpack, webpack-config |

## Links

- npm: https://www.npmjs.com/package/webpack-config
- Repository: https://github.com/Fitbit/webpack-config
- Issues: https://github.com/Fitbit/webpack-config/issues
- npm.io page: https://npm.io/package/webpack-config

## Dependencies (5)

- [lodash](https://npm.io/package/lodash.md) ^4.17.4
- [constitute](https://npm.io/package/constitute.md) ^1.6.2
- [yargs-parser](https://npm.io/package/yargs-parser.md) ^8.0.0
- [babel-runtime](https://npm.io/package/babel-runtime.md) ^6.25.0
- [recursive-iterator](https://npm.io/package/recursive-iterator.md) ^3.3.0

## Alternatives

- [jsforce](https://npm.io/package/jsforce.md) — 851.2K weekly downloads
- [react-native-qrcode-svg](https://npm.io/package/react-native-qrcode-svg.md) — 693.5K weekly downloads
- [@salesforce/plugin-data](https://npm.io/package/@salesforce/plugin-data.md) — 394.9K weekly downloads
- [@backstage/plugin-search-common](https://npm.io/package/@backstage/plugin-search-common.md) — 308.5K weekly downloads
- [@chain-registry/types](https://npm.io/package/@chain-registry/types.md) — 38.4K weekly downloads

## Recent versions

- 7.5.0 (latest) — 2017-10-17
- 7.4.1 — 2017-10-16
- 7.4.0 — 2017-08-18
- 7.3.0 — 2017-08-18
- 7.2.1 — 2017-08-09
- 7.2.0 — 2017-08-09
- 7.1.0 — 2017-07-30
- 7.0.0 — 2017-02-08
- 6.2.1 — 2016-11-02
- 6.2.0 — 2016-10-21
- 6.1.3 — 2016-09-20
- 6.1.2 — 2016-08-08
- 6.1.1 — 2016-08-08
- 6.1.0 — 2016-08-08
- 6.0.0 — 2016-08-04
- … 18 more at https://npm.io/package/webpack-config/versions

## README

[![NPM version](http://img.shields.io/npm/v/webpack-config.svg)](https://www.npmjs.org/package/webpack-config)
[![Travis build status](http://img.shields.io/travis/Fitbit/webpack-config/master.svg)](https://travis-ci.org/Fitbit/webpack-config)
[![AppVeyor build status](https://img.shields.io/appveyor/ci/mdreizin/webpack-config/master.svg?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAgMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBTMCAzMSAwIDIwIDkgMCAyMCAwem00LjkgMjMuOWMyLjItMi44IDEuOS02LjgtLjktOC45LTIuNy0yLjEtNi43LTEuNi05IDEuMi0yLjIgMi44LTEuOSA2LjguOSA4LjkgMi44IDIuMSA2LjggMS42IDktMS4yem0tMTAuNyAxM2MxLjIuNSAzLjggMSA1LjEgMUwyOCAyNS4zYzIuOC00LjIgMi4xLTkuOS0xLjgtMTMtMy41LTIuOC04LjQtMi43LTExLjkgMEwyLjIgMjEuNmMuMyAzLjIgMS4yIDQuOCAxLjIgNC45bDYuOS03LjVjLS41IDMuMy43IDYuNyAzLjUgOC44IDIuNCAxLjkgNS4zIDIuNCA4LjEgMS44bC03LjcgNy4zeiIgZmlsbD0iI0NDQyIgZmlsbC1ydWxlPSJub256ZXJvIi8%2BPC9zdmc%2B)](https://ci.appveyor.com/project/mdreizin/webpack-config/branch/master)
[![Code Climate GPA](https://img.shields.io/codeclimate/github/Fitbit/webpack-config.svg)](https://codeclimate.com/github/Fitbit/webpack-config)
[![Code Climate Coverage](https://img.shields.io/codeclimate/coverage/github/Fitbit/webpack-config.svg)](https://codeclimate.com/github/Fitbit/webpack-config)
[![Dependency Status](https://img.shields.io/david/Fitbit/webpack-config.svg)](https://david-dm.org/Fitbit/webpack-config)
[![Development Dependency Status](https://img.shields.io/david/dev/Fitbit/webpack-config.svg)](https://david-dm.org/Fitbit/webpack-config#info=devDependencies)
[![Greenkeeper badge](https://badges.greenkeeper.io/Fitbit/webpack-config.svg)](https://greenkeeper.io/)

# webpack-config

> Helps to load, extend and merge webpack configs

## Installation

```bash
npm install webpack-config --save-dev
```

or

```bash
yarn add webpack-config --dev
```

## Features

- [x] `#extend()` - Helps to extend config using local file or shareable config
- [x] `#merge()` - Helps to merge some values into config and overrides existing ones
- [x] `#defaults()` - Helps to add some values if they are missing
- [x] Supports `environment` variables under `#extend()`, `#merge()`, `#defaults()` methods
- [x] Supports `process.env.*` variables in addition to `environment` ones
- [x] Supports shareable configs via `node`-modules

## Changelog

Details changes for each release are documented in the [release notes](https://github.com/Fitbit/webpack-config/releases) and also in the [wiki page](https://github.com/Fitbit/webpack-config/wiki/Changelog).

## Shareable Configs

You can publish your configs to `npm` using `webpack-config-` prefix for package name.

When you call `#extend()` method you may omit that prefix:

```javascript
import Config from 'webpack-config';

export default new Config().extend(
    'mdreizin/base',
    'mdreizin/css',
    'mdreizin/html',
    'webpack-config-mdreizin/json'
    // etc
);
```

Also I would recommend to add `webpack` and `webpack-config` keywords so other users can easily find your module.

## Usage

`./webpack.config.js`

```javascript
import Config, { environment } from 'webpack-config';

environment.setAll({
    env: () => process.env.NODE_ENV
});

// Also you may use `'conf/webpack.[NODE_ENV].config.js'`
export default new Config().extend('conf/webpack.[env].config.js');
```

`./conf/webpack.base.config.js`

```javascript
import ExtractTextPlugin from 'extract-text-webpack-plugin';
import Config from 'webpack-config';

const extractCss = new ExtractTextPlugin('[name].css');

export default new Config().merge({
    output: {
        filename: '[name].js'
    },
    resolve: {
        root: [
            __dirname
        ],
        modulesDirectories: [
            'node_modules'
        ]
    },
    plugins: [
        extractCss
    ],
    module: {
        loaders: [{
            test: /\.less$/,
            loader: extractCss.extract('style', [
                'css',
                'less'
            ])
        }]
    }
});
```

`./conf/webpack.development.config.js`

```javascript
import webpack from 'webpack';
import Config from 'webpack-config';

export default new Config().extend('conf/webpack.base.config.js').merge({
    debug: true,
    devtool: '#source-map',
    output: {
        pathinfo: true
    },
    entry: {
        app: [
            'src/index.js',
            'src/index.less'
        ],
        vendor: [
            'lodash'
        ]
    },
    plugins: [
        new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')
    ]
});
```

`./conf/webpack.production.config.js`

```javascript
import webpack from 'webpack';
import Config from 'webpack-config';

export default new Config().extend({
    'conf/webpack.development.config.js': config => {
        delete config.debug;
        delete config.devtool;
        delete config.output.pathinfo;

        return config;
    }
}).merge({
    plugins: [
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.OccurrenceOrderPlugin(true),
        new webpack.optimize.UglifyJsPlugin({
            mangle: true,
            output: {
                comments: false
            },
            compress: {
                warnings: false
            }
        })
    ]
});
```

---
_Source: https://npm.io/package/webpack-config · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
