include ../_util-fns // The docs standard h4 style uppercases, making code terms unreadable. Override it. style. h4 {font-size: 17px !important; text-transform: none !important;} .syntax { font-family: Consolas, 'Lucida Sans', Courier, sans-serif; color: black; font-size: 85%; } :marked [**Webpack**](https://webpack.github.io/) is a popular module bundler, a tool for bundling application source code in convenient _chunks_ and for loading that code from a server into a browser. It's an excellent alternative to the *SystemJS* approach used elsewhere in the documentation. This guide offers a taste of Webpack and explains how to use it with Angular applications. ## Table of contents [What is Webpack?](#what-is-webpack) * [Entries and outputs](#entries-outputs) * [Loaders](#loaders) * [Plugins](#plugins) [Configuring Webpack](#configure-webpack) * [Common configuration](#common-configuration) * [Development configuration](#development-configuration) * [Production configuration](#production-configuration) * [Test configuration](#test-configuration) [Trying it out](#try) [Conclusions](#conclusions) .l-main-section :marked ## What is Webpack? Webpack is a powerful module bundler. A _bundle_ is a JavaScript file that incorporate _assets_ that *belong* together and should be served to the client in a response to a single file request. A bundle can include JavaScript, CSS styles, HTML, and almost any other kind of file. Webpack roams over your application source code, looking for `import` statements, building a dependency graph, and emitting one (or more) _bundles_. With plugins and rules, Webpack can preprocess and minify different non-JavaScript files such as TypeScript, SASS, and LESS files. You determine what Webpack does and how it does it with a JavaScript configuration file, `webpack.config.js`. a(id="entries-outputs") .l-main-section :marked ### Entries and outputs You supply Webpack with one or more *entry* files and let it find and incorporate the dependencies that radiate from those entries. The one entry point file in this example is the application's root file, `src/app.ts`: +makeExample('webpack/ts-snippets/webpack.config.snippets.ts', 'one-entry', 'webpack.config.js (single entry)')(format=".") :marked Webpack inspects that file and traverses its `import` dependencies recursively. +makeExample('webpack/ts-snippets/webpack.config.snippets.ts', 'app-example', 'src/app.ts')(format=".") :marked It sees that you're importing *@angular/core* so it adds that to its dependency list for (potential) inclusion in the bundle. It opens the *@angular/core* file and follows _its_ network of `import` statements until it has built the complete dependency graph from `app.ts` down. Then it **outputs** these files to the `app.js` _bundle file_ designated in configuration: +makeExample('webpack/ts-snippets/webpack.config.snippets.ts', 'one-output', 'webpack.config.js (single output)')(format=".") :marked This `app.js` output bundle is a single JavaScript file that contains the application source and its dependencies. You'll load it later with a `