Webpack simplified in a fluent API with presets & an escape hatch so you're not locked in.
require.context
, require.ensure
).This project attempts to solve these problems via:
.presets
for getting started quickly.Upcoming features:
.presets
:
.autoinstall()
- Install missing dependencies..conventions()
- Default input & output sources..hot()
- Simplify HMR..offline()
- Add offline support to your app..react()
- Quickly get started with React.terse-webpack
CLI - Start coding without any initialization.// webpack.config.js
module.exports = require("@terse/webpack").api()
.entry("./src/client.js")
.loader("babel", ".js", {
exclude: /node_modules/,
query: { cacheDirectory: true },
})
.modules("./lib")
.output("build/client")
.target("web")
.when("development", function(api) {
return api
.entry({
client: [
"webpack-hot-middleware/client?reload=true&timeout=2000",
"./src/client.js",
],
})
.plugin("npm-install-webpack-plugin")
.plugin("webpack.HotModuleReplacementPlugin")
.plugin("webpack.NoErrorsPlugin")
.sourcemap("source-map")
;
})
.getConfig()
;
client.js
in the build directory from ./src/client.js
..js
files (excluding node_modules
) with Babel.node_modules
and ./lib
for non-relative files../build/client
.web
(vs. node
).NODE_ENV
is development
:
a. Override client.js
to support HMR.
b. Add npm-install-webpack-plugin
to auto-install missing dependencies.
c. Add HMR support.
d. Enable source-map
-style source maps (e.g. .map
files).I recommend using this against the latest Node + NPM v3.
npm install @terse/webpack
Replace the contents of webpack.config.js
(and others) with:
module.exports = require("@terse/webpack").api()
...
.getConfig()
;
It's crucial to call .getConfig()
to return the Webpack configuration.
With the upcoming .presets
, it'll be as simple as:
module.exports = require("@terse.webpack").api()
.presets("autoinstall", "hot", "react", "offline")
.target("web")
.getConfig()
;
.api([customFeatures[, customReducers]])
Begins fluent interface, optionally accepted an array of custom features and custom reducers.
.alias(name[, pathOrName])
Maps a package name (e.g.
react
) to another library (e.g.react-lite
) or to a path (e.g../node_modules/react
).
.context(path)
Config files are relative to this folder. (Default:
process.cwd()
)
.env(environment)
Overrides
NODE_ENV
(defaults todevelopment
) the build is for.
.externals(...[Function, RegExp, String])
Prevents Webpack from bundling matching resources.
.loader(name[, extensions = ".js"[, options]])
Add a loader for the given extension(s) with the given settings.
.modules(path)
Lookup non-relative (e.g.
my-cool-lib
) modules in this folder as well asnode_modules
.
.node(options)
Override built-in Node constants & libs (e.g.
__dirname
,__filename
)
.output(pathOrOptions)
Set the output path, or specify the entire Webpack output configuration.
.plugin(name, ...args)
Installed automatically with the given arguments.
.preLoader(name[, extensions = ".js"[, options]])
Just like
.loader
, but is ran before all other loaders.
.sourcemap(type)
Add a source map to the build.
.target(runtime)
Either
node
orweb
.
.getConfig()
Returns the Webpack configuration
.toString()
Returns the Webpack configuration as a string.
.getState()
Returns the normalized configuration (prior to reducing).
.toString()
Returns a string of the normalized configuraiton.
MIT License 2016 © Eric Clemmons