2015-07-21 06:29:53 +08:00
[](https://webpack.github.io)
2012-03-10 20:11:23 +08:00
2015-07-21 06:29:53 +08:00
[![NPM version][npm-image]][npm-url] [![Gitter chat][gitter-image]][gitter-url] [![Downloads][downloads-image]][downloads-url]
2016-02-04 21:55:00 +08:00
2015-07-13 17:55:29 +08:00
[![NPM][nodei-image]][nodei-url]
2015-07-21 06:29:53 +08:00
build
[![Build Status][travis-image]][travis-url] [![Appveyor Status][appveyor-image]][appveyor-url] [![Coverage Status][coveralls-image]][coveralls-url]
2015-07-13 17:55:29 +08:00
2015-07-21 06:29:53 +08:00
dependencies
2015-07-13 05:44:07 +08:00
[![Dependency Status][david-image]][david-url] [![devDependency Status][david-dev-image]][david-dev-url] [![peerDependency Status][david-peer-image]][david-peer-url]
2015-07-08 21:40:39 +08:00
2015-07-21 06:29:53 +08:00
donation
2015-09-25 17:00:29 +08:00
[![gratipay donate button][gratipay-image]][gratipay-url] [![Donate to sokra][donate-image]][donate-url]
2015-07-13 17:55:29 +08:00
2016-02-04 05:36:57 +08:00
[![BADGINATOR][badginator-image]][badginator-url]
2015-07-13 17:55:29 +08:00
2015-07-21 06:29:53 +08:00
[documentation ](https://webpack.github.io/docs/?utm_source=github&utm_medium=readme&utm_campaign=top )
2012-04-03 22:26:08 +08:00
2013-01-31 01:49:25 +08:00
# Introduction
2012-03-10 20:11:23 +08:00
2015-06-13 03:53:43 +08:00
webpack is a bundler for modules. The main purpose is to bundle JavaScript
2015-03-25 14:43:48 +08:00
files for usage in a browser, yet it is also capable of transforming, bundling,
or packaging just about any resource or asset.
2012-04-08 03:36:55 +08:00
2015-02-26 12:26:43 +08:00
**TL; DR**
2012-03-10 20:11:23 +08:00
2016-05-14 22:47:37 +08:00
* Bundles both [CommonJS ](http://wiki.commonjs.org/ ) and [AMD ](https://github.com/amdjs/amdjs-api/wiki/AMD ) modules (even combined).
2015-03-25 13:57:09 +08:00
* Can create a single bundle or multiple chunks that are asynchronously loaded at runtime (to reduce initial loading time).
* Dependencies are resolved during compilation reducing the runtime size.
2015-06-13 03:53:43 +08:00
* Loaders can preprocess files while compiling, e.g. coffeescript to JavaScript, handlebars strings to compiled functions, images to Base64, etc.
2015-03-25 14:43:48 +08:00
* Highly modular plugin system to do whatever else your application requires.
# Getting Started
2012-03-20 02:59:38 +08:00
2015-07-21 06:29:53 +08:00
Check out webpack's [documentation ](https://webpack.github.io/docs/?utm_source=github&utm_medium=readme&utm_campaign=trdr ) for quick Getting Started guide, in-depth usage,
2015-03-25 13:57:09 +08:00
tutorials and resources.
2012-03-10 20:11:23 +08:00
2014-04-09 06:19:52 +08:00
# Installation
2013-12-05 23:28:50 +08:00
2014-04-09 06:20:56 +08:00
project:
2014-04-09 06:21:23 +08:00
`npm install webpack --save-dev`
2014-04-09 06:20:56 +08:00
global:
2014-04-09 06:21:23 +08:00
`npm install webpack -g`
2016-03-30 17:55:31 +08:00
Usage:
2015-07-21 06:29:53 +08:00
https://webpack.github.io/docs/tutorials/getting-started/
2013-12-05 23:28:50 +08:00
2012-05-22 01:31:13 +08:00
# Examples
2012-04-08 18:53:54 +08:00
2013-03-26 23:54:41 +08:00
Take a look at the [`examples` ](https://github.com/webpack/webpack/tree/master/examples ) folder.
2013-01-31 01:49:25 +08:00
# Features
2014-01-15 06:22:35 +08:00
## Plugins
2015-03-25 15:36:17 +08:00
webpack has a [rich plugin
2015-07-21 06:29:53 +08:00
interface](https://webpack.github.io/docs/plugins.html). Most of the features
2015-03-25 13:57:09 +08:00
within webpack itself use this plugin interface. This makes webpack very
**flexible**.
2014-01-15 06:22:35 +08:00
2015-03-25 14:43:48 +08:00
2014-01-15 06:22:35 +08:00
## Performance
2015-03-25 15:36:17 +08:00
webpack uses async I/O and has multiple caching levels. This makes webpack fast
2015-03-25 13:57:09 +08:00
and incredibly **fast** on incremental compilations.
2014-01-15 06:22:35 +08:00
## Loaders
2015-03-25 15:36:17 +08:00
webpack enables use of loaders to preprocess files. This allows you to bundle
2015-06-13 03:53:43 +08:00
**any static resource** way beyond JavaScript. You can easily [write your own
2015-07-21 06:29:53 +08:00
loaders](https://webpack.github.io/docs/loaders.html) using node.js.
2015-03-25 13:57:09 +08:00
2015-03-25 14:43:48 +08:00
Loaders are activated by using `loadername!` prefixes in `require()` statements,
2015-03-25 13:57:09 +08:00
or are automatically applied via regex from your webpack configuration.
2015-07-21 06:29:53 +08:00
Please see [Using Loaders ](https://webpack.github.io/docs/using-loaders.html ) for more information.
2015-03-25 13:57:09 +08:00
**basic**
* [`json` ](https://github.com/webpack/json-loader ): Loads file as JSON
* [`raw` ](https://github.com/webpack/raw-loader ): Loads raw content of a file (as utf-8)
* [`val` ](https://github.com/webpack/val-loader ): Executes code as module and consider exports as JavaScript code
* [`script` ](https://github.com/webpack/script-loader ): Executes a JavaScript file once in global context (like in script tag), requires are not parsed.
**packaging**
* [`file` ](https://github.com/webpack/file-loader ): Emits the file into the output folder and returns the (relative) url.
* [`url` ](https://github.com/webpack/url-loader ): The url loader works like the file loader, but can return a Data Url if the file is smaller than a limit.
* [`image` ](https://github.com/tcoopman/image-webpack-loader ): Compresses your images. Ideal to use together with `file` or `url` .
2015-11-04 23:52:50 +08:00
* [`svgo-loader` ](https://github.com/rpominov/svgo-loader ): Compresses SVG images using [svgo ](https://github.com/svg/svgo ) library
2015-03-25 13:57:09 +08:00
* [`baggage` ](https://github.com/deepsweet/baggage-loader ): Automatically require any resources related to the required one
* [`polymer-loader` ](https://github.com/JonDum/polymer-loader ): Process HTML & CSS with preprocessor of choice and `require()` Web Components like first-class modules.
**dialects**
* [`coffee` ](https://github.com/webpack/coffee-loader ): Loads coffee-script like JavaScript
* [`babel` ](https://github.com/babel/babel-loader ): Turn ES6 code into vanilla ES5 using [Babel ](https://github.com/babel/babel ).
* [`livescript` ](https://github.com/appedemic/livescript-loader ): Loads LiveScript like JavaScript
2015-07-21 06:29:53 +08:00
* [`sweetjs` ](https://github.com/jlongster/sweetjs-loader ): Use sweetjs macros.
2015-03-25 13:57:09 +08:00
* [`traceur` ](https://github.com/jupl/traceur-loader ): Use future JavaScript features with [Traceur ](https://github.com/google/traceur-compiler ).
* [`typescript` ](https://github.com/andreypopp/typescript-loader ): Loads TypeScript like JavaScript.
**templating**
* [`html` ](https://github.com/webpack/html-loader ): Exports HTML as string, require references to static resources.
* [`jade` ](https://github.com/webpack/jade-loader ): Loads jade template and returns a function
* [`handlebars` ](https://github.com/altano/handlebars-loader ): Loads handlebars template and returns a function
* [`ractive` ](https://github.com/rstacruz/ractive-loader ): Pre-compiles Ractive templates for interactive DOM manipulation
* [`markdown` ](https://github.com/peerigon/markdown-loader ): Compiles Markdown to HTML
* [`ng-cache` ](https://github.com/teux/ng-cache-loader ): Puts HTML partials in the Angular's $templateCache
**styling**
* [`style` ](https://github.com/webpack/style-loader ): Add exports of a module as style to DOM
* [`css` ](https://github.com/webpack/css-loader ): Loads css file with resolved imports and returns css code
2016-09-20 23:25:45 +08:00
* [`postcss` ](https://github.com/postcss/postcss-loader ): Loads and compiles css using various [plugins ](https://github.com/postcss/postcss#plugins )
2015-03-25 13:57:09 +08:00
* [`less` ](https://github.com/webpack/less-loader ): Loads and compiles a less file
* [`sass` ](https://github.com/jtangelder/sass-loader ): Loads and compiles a scss file
* [`stylus` ](https://github.com/shama/stylus-loader ): Loads and compiles a stylus file
2015-03-25 14:43:48 +08:00
**misc**
2015-11-04 23:52:50 +08:00
* [`po` ](https://github.com/perchlayer/po-loader ): Loads a PO gettext file and returns JSON
2015-03-25 14:43:48 +08:00
* [`mocha` ](https://github.com/webpack/mocha-loader ): Do tests with mocha in browser or node.js
2015-03-25 13:57:09 +08:00
* [`eslint` ](https://github.com/MoOx/eslint-loader ): PreLoader for linting code using ESLint.
* [`jshint` ](https://github.com/webpack/jshint-loader ): PreLoader for linting code.
* [`jscs` ](https://github.com/unindented/jscs-loader ): PreLoader for style checking.
* [`injectable` ](https://github.com/jauco/webpack-injectable ): Allow to inject dependencies into modules
* [`transform` ](https://github.com/webpack/transform-loader ): Use browserify transforms as loader.
2016-09-28 13:03:02 +08:00
* [`jsbeautify` ](https://github.com/tomaszczechowski/jsbeautify-loader ): Autoformatting code.
2015-03-25 13:57:09 +08:00
2015-07-21 06:29:53 +08:00
For the full list of loaders, see [list of loaders ](https://webpack.github.io/docs/list-of-loaders.html ).
2014-01-15 06:22:35 +08:00
2015-03-25 14:43:48 +08:00
## Module Format (AMD/CommonJS)
2014-01-15 06:22:35 +08:00
2015-03-25 15:36:17 +08:00
webpack supports **both** AMD and CommonJS module styles. It performs clever static
2015-03-25 13:57:09 +08:00
analysis on the AST of your code. It even has an evaluation engine to evaluate
2015-03-25 14:43:48 +08:00
simple expressions. This allows you to **support most existing libraries** out of the box.
2014-01-15 06:22:35 +08:00
## Code Splitting
2015-03-25 15:36:17 +08:00
webpack allows you to split your codebase into multiple chunks. Chunks are
2015-03-25 13:57:09 +08:00
loaded asynchronously at runtime. This reduces the initial loading time.
2015-07-21 06:29:53 +08:00
[Code Splitting documentation ](https://webpack.github.io/docs/code-splitting.html )
2014-01-15 06:22:35 +08:00
## Optimizations
2015-03-25 15:36:17 +08:00
webpack can do many optimizations to **reduce the output size of your
2015-06-13 03:53:43 +08:00
JavaScript** by deduplicating frequently used modules, minifying, and giving
2015-03-25 13:57:09 +08:00
you full control of what is loaded initially and what is loaded at runtime
2016-08-23 22:36:41 +08:00
through code splitting. It can also make your code chunks **cache
2015-07-21 06:29:53 +08:00
friendly** by using hashes.
2014-01-15 06:22:35 +08:00
2015-07-21 06:29:53 +08:00
[Optimization documentation ](https://webpack.github.io/docs/optimization.html )
2014-01-15 06:22:35 +08:00
2014-10-03 05:18:55 +08:00
# A small example of what's possible
2012-03-27 10:23:11 +08:00
``` javascript
2015-04-21 02:01:28 +08:00
// webpack is a module bundler.
2014-02-20 15:52:12 +08:00
// This means webpack takes modules with dependencies
2015-02-26 12:26:43 +08:00
// and emits static assets representing those modules.
2015-07-21 06:29:53 +08:00
2016-05-14 22:47:37 +08:00
// Dependencies can be written in CommonJS
2013-01-31 01:49:25 +08:00
var commonjs = require("./commonjs");
2014-02-20 15:52:12 +08:00
// or in AMD
2015-02-26 12:26:43 +08:00
define(["amd-module", "../file"], function (amdModule, file) {
// while previous constructs are sync,
2014-02-20 15:52:12 +08:00
// this is async
2015-02-26 12:26:43 +08:00
require(["big-module/big/file"], function (big) {
2015-04-21 02:01:28 +08:00
// For async dependencies, webpack splits
2015-05-27 10:29:04 +08:00
// your application into multiple "chunks".
2014-02-20 15:52:12 +08:00
// This part of your application is
2015-02-26 12:26:43 +08:00
// loaded on demand (code-splitting).
2013-01-31 01:49:25 +08:00
var stuff = require("../my/stuff");
2015-02-26 12:26:43 +08:00
// "../my/stuff" is also loaded on-demand
2014-02-20 15:52:12 +08:00
// because it's in the callback function
2015-02-26 12:26:43 +08:00
// of the AMD require.
2013-01-31 01:49:25 +08:00
});
2012-03-27 10:23:11 +08:00
});
2015-07-21 06:29:53 +08:00
2013-01-31 01:49:25 +08:00
require("coffee!./cup.coffee");
2015-02-26 12:26:43 +08:00
// "Loaders" are used to preprocess files.
2014-02-20 15:52:12 +08:00
// They can be prefixed in the require call
2015-02-26 12:26:43 +08:00
// or configured in the configuration.
2013-01-31 01:49:25 +08:00
require("./cup");
2014-02-20 15:52:12 +08:00
// This does the same when you add ".coffee" to the extensions
2015-02-26 12:26:43 +08:00
// and configure the "coffee" loader for /\.coffee$/
function loadTemplate (name) {
2014-02-20 15:52:12 +08:00
return require("./templates/" + name + ".jade");
2015-02-26 12:26:43 +08:00
// Many expressions are supported in require calls.
// A clever parser extracts information and concludes
// that everything in "./templates" that matches
// /\.jade$/ should be included in the bundle, as it
// can be required.
2012-05-12 22:43:37 +08:00
}
2015-04-21 02:01:28 +08:00
2015-02-26 12:26:43 +08:00
// ...and you can combine everything.
function loadTemplateAsync (name, callback) {
2015-07-21 06:29:53 +08:00
require(["bundle?lazy!./templates/" + name + ".jade"],
2015-02-26 12:26:43 +08:00
function (templateBundle) {
templateBundle(callback);
2013-01-31 01:49:25 +08:00
});
2012-05-12 22:43:37 +08:00
}
```
2012-03-10 20:11:23 +08:00
2013-05-31 19:46:21 +08:00
## Documentation
2015-07-21 06:29:53 +08:00
[documentation ](https://webpack.github.io/docs/?utm_source=github&utm_medium=readme&utm_campaign=documentation )
2013-05-31 19:46:21 +08:00
2015-02-28 08:31:50 +08:00
## Changelog
2015-07-21 06:29:53 +08:00
[changelog ](https://webpack.github.io/docs/changelog.html )
2015-02-28 08:31:50 +08:00
2012-03-10 20:11:23 +08:00
## Tests
2015-07-13 05:44:07 +08:00
You can run the Node tests with `npm test` .
2012-03-10 20:11:23 +08:00
You can run the browser tests:
```
cd test/browsertests
node build
```
2015-02-26 12:26:43 +08:00
and open `tests.html` in the browser.
2012-10-26 06:01:57 +08:00
2012-03-10 20:11:23 +08:00
## Contribution
2015-03-25 15:36:17 +08:00
Most of the time, if webpack is not working correctly for you it is a simple configuration issue.
2015-03-25 13:57:09 +08:00
If you are still having difficulty after looking over your configuration carefully, please post
a question to [StackOverflow with the webpack tag ](http://stackoverflow.com/tags/webpack ). Questions
that include your webpack.config.js and relevant files are more likely to receive responses.
If you have discovered a bug or have a feature suggestion, feel free to create an issue on Github.
2015-04-09 00:11:15 +08:00
If you create a loader or plugin, please consider open sourcing it, putting it
2015-03-25 13:57:09 +08:00
on NPM and following the `x-loader` , `x-plugin` convention.
2012-03-10 20:11:23 +08:00
2015-03-25 13:57:09 +08:00
You are also welcome to correct any spelling mistakes or any language issues.
2012-03-21 06:28:43 +08:00
2015-03-25 13:57:09 +08:00
If you want to discuss something or just need help, [here is our gitter.im room ](https://gitter.im/webpack/webpack ).
2012-10-26 06:01:57 +08:00
2012-03-10 20:11:23 +08:00
## License
2016-01-07 16:24:38 +08:00
Copyright (c) 2012-2016 Tobias Koppers
2012-05-25 06:17:02 +08:00
2015-11-04 23:52:50 +08:00
MIT (http://opensource.org/licenses/mit-license.php)
2012-05-12 23:02:20 +08:00
2015-05-20 14:42:11 +08:00
## Thanks to
(In chronological order)
2016-04-09 01:44:19 +08:00
* @google for [Google Web Toolkit (GWT) ](https://code.google.com/archive/p/google-web-toolkit ), which aims to compile Java to JavaScript. It features a similar [Code Splitting ](http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html ) as webpack.
2015-09-18 12:04:47 +08:00
* @medikoo for [modules-webmake ](https://github.com/medikoo/modules-webmake ), which is a similar project. webpack was born because I wanted Code Splitting for modules-webpack. Interestingly the [Code Splitting issue is still open ](https://github.com/medikoo/modules-webmake/issues/7 ) (thanks also to @Phoscur for the discussion).
2015-05-20 14:42:11 +08:00
* @substack for [browserify ](http://browserify.org/ ), which is a similar project and source for many ideas.
* @jrburke for [require.js ](http://requirejs.org/ ), which is a similar project and source for many ideas.
2015-05-22 00:55:18 +08:00
* @defunctzombie for the [browser-field spec ](https://gist.github.com/defunctzombie/4339901 ), which makes modules available for node.js, browserify and webpack.
2015-05-20 14:42:11 +08:00
* Every early webpack user, which contributed to webpack by writing issues or PRs. You influenced the direction...
* @shama , @jhnns and @sokra for maintaining this project
* Everyone who has written a loader for webpack. You are the ecosystem...
* Everyone I forgot to mention here, but also influenced webpack.
2014-01-30 16:03:38 +08:00
## Sponsor
2015-04-21 02:01:28 +08:00
This is a free-time project. The time I invest in it fluctuates. If you use webpack for a serious task, and you'd like me to invest more time on it, please donate. This project increases your income/productivity too. It makes development and applications faster and it reduces the required bandwidth.
2014-01-30 16:03:38 +08:00
2016-04-19 06:11:13 +08:00
Another way you can help fund Webpack is by buying the ebook ["SurviveJS - Webpack" ](https://leanpub.com/survivejs-webpack ), where around ~30% of the book's profit will go to me.
2015-02-26 12:26:43 +08:00
I'm very thankful for every dollar. If you leave your username or email, I may show my thanks by giving you extra support.
2014-01-30 16:03:38 +08:00
2013-01-31 01:49:25 +08:00
2012-05-12 23:02:20 +08:00
## Dependencies
* [esprima ](http://esprima.org/ )
2013-01-31 01:49:25 +08:00
* [enhanced-resolve ](https://github.com/webpack/enhanced-resolve )
2012-05-12 23:02:20 +08:00
* [uglify-js ](https://github.com/mishoo/UglifyJS )
2015-11-04 23:52:50 +08:00
* [mocha ](https://github.com/mochajs/mocha )
* [should ](https://github.com/tj/should.js )
2013-01-31 01:49:25 +08:00
* [optimist ](https://github.com/substack/node-optimist )
* [async ](https://github.com/caolan/async )
2014-03-02 05:02:30 +08:00
* [mkdirp ](https://github.com/substack/node-mkdirp )
2013-02-11 07:43:35 +08:00
* [clone ](https://github.com/pvorb/node-clone )
2015-04-24 20:00:52 +08:00
2015-11-04 23:52:50 +08:00
[travis-url]: https://travis-ci.org/webpack/webpack
2016-05-17 21:32:35 +08:00
[travis-image]: https://img.shields.io/travis/webpack/webpack/master.svg
2015-04-24 20:00:52 +08:00
[appveyor-url]: https://ci.appveyor.com/project/sokra/webpack/branch/master
[appveyor-image]: https://ci.appveyor.com/api/projects/status/github/webpack/webpack?svg=true
[coveralls-url]: https://coveralls.io/r/webpack/webpack/
[coveralls-image]: https://img.shields.io/coveralls/webpack/webpack.svg
2015-11-04 23:52:50 +08:00
[npm-url]: https://www.npmjs.com/package/webpack
2015-04-24 20:00:52 +08:00
[npm-image]: https://img.shields.io/npm/v/webpack.svg
2015-11-04 23:52:50 +08:00
[downloads-image]: https://img.shields.io/npm/dm/webpack.svg
2015-07-13 05:44:07 +08:00
[downloads-url]: http://badge.fury.io/js/webpack
2015-04-24 20:00:52 +08:00
[david-url]: https://david-dm.org/webpack/webpack
[david-image]: https://img.shields.io/david/webpack/webpack.svg
2015-07-13 05:44:07 +08:00
[david-dev-url]: https://david-dm.org/webpack/webpack#info=devDependencies
[david-dev-image]: https://david-dm.org/webpack/webpack/dev-status.svg
[david-peer-url]: https://david-dm.org/webpack/webpack#info=peerDependencies
[david-peer-image]: https://david-dm.org/webpack/webpack/peer-status.svg
2015-11-06 07:32:11 +08:00
[nodei-image]: https://nodei.co/npm/webpack.png?downloads=true& downloadRank=true& stars=true
2015-11-04 23:52:50 +08:00
[nodei-url]: https://www.npmjs.com/package/webpack
2015-04-24 20:00:52 +08:00
[donate-url]: http://sokra.github.io/
[donate-image]: https://img.shields.io/badge/donate-sokra-brightgreen.svg
2015-09-25 17:00:29 +08:00
[gratipay-url]: https://gratipay.com/webpack/
[gratipay-image]: https://img.shields.io/gratipay/webpack.svg
2015-04-24 20:00:52 +08:00
[gitter-url]: https://gitter.im/webpack/webpack
[gitter-image]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg
2016-02-04 05:36:57 +08:00
[badginator-image]: https://badginator.herokuapp.com/webpack/webpack.svg
[badginator-url]: https://github.com/defunctzombie/badginator