webpack-config-spaceship
Version:
Webpack config to get a project off the ground fast.
178 lines (123 loc) • 2.81 kB
Markdown
# webpack-config-spaceship
> Webpack config to get a project off the ground fast.
## Installation
npm install --save-dev webpack-config-spaceship
## Setup
```js
// webpack.config.js
const spaceship = require('webpack-config-spaceship');
module.exports = spaceship({
cwd: __dirname, // recommended
entry: {
main: './src/main/client/index.js',
},
output: {
path: './dist',
publicPath: '/assets',
},
});
```
## Options
#### cwd
Path to project root.
```js
{
cwd: __dirname, // recommended
}
```
#### context
**Relative** path to source directory. Affects entry paths. Relative to `options.cwd`.
#### entry
Webpack entry.
```js
{
main: './main/client/index.jsx'
}
```
https://webpack.js.org/configuration/entry-context/#entry
#### output.path
**Relative** path to output directory.
```js
{
output: {
path: './build', // default
},
}
```
#### output.publicPath
https://webpack.js.org/guides/public-path
#### merge
Webpack config to be `lodash.merge`d with the config generated by spaceship.
```js
const config = spaceship({
merge: {
devServer: {
hot: true,
},
// etc
},
});
```
#### vendor
Boolean whether to automatically create a vendor chunk with `babel-polyfill` and `whatwg-fetch`. Turn this off for libraries.
#### common
Boolean whether to automatically create a common chunk. Turn this off for libraries.
#### filterPlugin(plugin, i)
A function to filter out plugins generated by spaceship.
```js
const config = spaceship({
filterPlugin(plugin, i) {
if (Math.random() > 0.5) {
return false;
}
return true;
},
});
```
#### mapPlugin(plugin, i)
A function to replace some plugins with different ones.
```js
const config = spaceship({
mapRule(rule, i) {
if (i === 0) {
return new webpack.optimize.OccurrenceOrderPlugin();
}
return rule;
},
});
```
#### filterRule(rule, i)
Same as `filterPlugin`, but for rules.
#### mapRule(rule, i)
Same as `mapPlugin`, but for rules.
#### statsPath
Path to save webpack stats.
```js
{
statsPath: 'src/webpack.stats.json', // default
}
```
#### manifestPath
Path to save manifest file (list of files by entry and type).
```js
{
manifestPath: 'src/webpack.manifest.json', // default
}
```
#### stylesheets
Disable ExtractTextPlugin.
## Hot Module Reloading
Spaceship automatically configures:
- `HotModuleReplacementPlugin`
- `NamedModulesPlugin`
- `react-hot-loader/babel`
- `devServer` config option
What you'll need to configure:
- entry loaders
- `react-hot-loader/patch`
- `webpack-dev-server/client?http://localhost:8080`,
- `webpack/hot/only-dev-server`
- `<AppContainer />`
https://webpack.js.org/guides/hmr-react/
## License
Copyright (c) 2017 Marius Craciunoiu. Licensed under the MIT license.