Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rmariuzzo/config-webpack-plugin

šŸ’« Merge one or more configuration files together with environment variables too.
https://github.com/rmariuzzo/config-webpack-plugin

configuration configuration-by-environment javascript webpack webpack-plugin

Last synced: 2 months ago
JSON representation

šŸ’« Merge one or more configuration files together with environment variables too.

Awesome Lists containing this project

README

        

# config-webpack-plugin

> šŸ’« Merge one or more configuration files together with environment variables too.

## Installation

```sh
npm install config-webpack-plugin --save-dev
```

### How it works?

Let's say you have a base configuration file (`./config.js`) shared across your team. Now, you want for every developer to be able to override any configuration value without modifying the base configuration file. Therefore, every developer can create a _local_ configuration file (`./config.local.js`). Andā€¦ `config-webpack-plugin` will do the rest for you.

**`webpack.config.js`:**
```js
const ConfigPlugin = require('config-webpack-plugin')

module.exports = {
plugins: [
new ConfigPlugin([
'./config.js',
'./config.local.js'
])
]
}
```

1. The `config-webpack-plugin` will merge all specified configuration file contents from _right to left_, thus creating a _ā€˜merged configurationā€™_.
![Merging configuration files](https://github.com/rmariuzzo/config-webpack-plugin/raw/master/img/merging-config-files.png)

2. If the _ā€˜merged configurationā€™_ contains a `key` matching a current environment variable then the related `value` will be replaced by the environment variable's value.
![Environment variables replacements](https://github.com/rmariuzzo/config-webpack-plugin/raw/master/img/env-vars-replacement.png)

3. Finally, the `config-webpack-plugin` will intercept the _ā€˜main configurationā€™_ file (the first specified) during webpack's module resolution and will replace its source with the _ā€˜merged configurationā€™_.

## Usage

### Single configuration

```js
const ConfigPlugin = require('config-webpack-plugin');

module.exports = {
plugins: [
new ConfigPlugin('./config.js')
]
}
```

### Multiple configuration

```js
const ConfigPlugin = require('config-webpack-plugin');

module.exports = {
plugins: [
new ConfigPlugin([
'./config.js',
'./config.local.js'
])
]
}
```

## FAQ

### What is a configuration file?

A module that export an object with key/value pairs that looks like:

```js
module.exports = {
API_BASE_URL: 'http://localhost/',
NODE_ENV: 'development',
AUTH_SPOOFED: true,
}
```

### Does my configuration file gets modified?

No.

## Development

If you want to collaborate with the development of `config-webpack-plugin` you need to have installed NodeJS 6 and Gulp. Then follow these instructions to make my life easier:

1. Fork this repo.
2. Clone your forked repo.
3. Create a _feature branch_ with: `git checkout develop; git checkout -b feature/`.
4. Create a pull request **to be merged into `develop` branch**.

> šŸ’ Please, do not submit PR to be merged into `master` branch.

### Roadmap

- [x] [Add test. Please!](https://github.com/rmariuzzo/config-webpack-plugin/issues/4)
- [x] [Add CI. Please!](https://github.com/rmariuzzo/config-webpack-plugin/issues/5)
- [x] [Support multiple file](https://github.com/rmariuzzo/config-webpack-plugin/issues/2) (`new ConfigPlugin(['./config.default.js', '.config.local.js'])`).
- [ ] Support JSON file too ā™„ļø, because they are prettiest for configuration.
- [ ] [Add a static website using GitHub Pages](https://github.com/rmariuzzo/config-webpack-plugin/issues/3) (why not?).

> šŸ’ Do you want to suggest a feature? [Add a suggestion](https://github.com/rmariuzzo/config-webpack-plugin/issues/new).