Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Angular Template Angular Template
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 1
    • Issues 1
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • IzeniIzeni
  • Angular TemplateAngular Template
  • Wiki
  • webpack

webpack · Changes

Page history
complete basic webpack writeup authored Sep 14, 2016 by Mikkel Davis's avatar Mikkel Davis
Show whitespace changes
Inline Side-by-side
webpack.md
View page @ 567b01e6
### Why Webpack?
We are choosing to use webpack as our development environment for a variety of reasons:
We are choosing to use [webpack](http://webpack.github.io/docs/) as our development environment for a variety of reasons:
* powerful loader/transpiler pipelines
* has a robust development server
* has a robust development server (WDS--webpack-dev-server)
* avoids the ridiculous SystemJS config that the Angular team shows in their docs
* ability to break out entire components into webpack bundlable chunks, which could potentially be loaded independently over HTTP/2
* hot module replacement (right now mainly for style, eventually for entire dom components)
### FYI
* esnext-style import statements should got at the top of files; fyi, imports are converted down to es5 as calls of require()
* requires()s can go anywhere in javascript; they're one of the first things webpack handles when parsing
* anything imported or required ends up in one of the three bundles: polyfills.js, vendors.js, main.js
* import third-party dependencies into the vendors.ts file (or polyfills.ts, as appropriate); this help optomize the three bundles
* webpack can't really watch it's own config file for changes (unless you setup a little node server to run WDS for you), _so any changes to the config file require a restart of the WDS process_
notes
* import new dependencies into the vendors.ts file
* config, vendors, polyfills
\ No newline at end of file
### webpack.config.js
* **devServer** (near the top of the module): use to configure WDS host address and port
* **entry**: names of bundles, with the entry point files for each
* **output**
- output to a directory called 'build' (this only exists in memory while using WDS)
- publicPath tells WDS where, relative to within the 'build' directory, to serve from
* **resolve**: filetypes to try, in order from right to left, when there is not extension specified in the import path (i.e. `import Thing from './thing.component'`)
* **loaders**
- loaders are used to convert file contents from one format into another, and/or to inject those contents into certain parts of a javascript bundle or html file, or anything else the given loader is configured to do
- webpack assumes there is a `'-loader'` on the end of a loader name, so `loader: 'html'` and `loader: 'html-loader'` are interchangeable
- _test_: regex for specifying which loaders you want to use for given file name/path matches
- files are fed through the specified loader(s) from right to left. e.g. *.css and *.scss files go through the sass-loader, then the postcss-loader (for autoprefixing and minification), then the raw-loader to make a string for use in ng2 components
- angular2-template-loader allows for simply giving a relative path for ng2 component html template files and css files rather than having to require() them first. It adds the require()s for you
* **postcss** & **autoprefixer**: you can specify a variety of autoprefixer settings here (see https://github.com/ai/browserslist#queries)
* **tslint**: options for tslint preLoader (see https://github.com/wbuchwalter/tslint-loader); looks at the [tslint.json file](https://dev.izeni.net/izeni/izeni-angular-template/blob/ng2/tslint.json) by default
* **plugins**
- various webpack plugins used for configuration, optimization, etc
- _CommonsChunkPlugin_: optimizes chunks by keeping track of what has already been including, from right to left, to prevent duplication of modules
- _HtmlWebpackPlugin_: where to append script tags for generated bundle js files
- **ProvidePlugin**: for specifying variables that are global to the bundle (rather than global to the web app via a script tag in index.html); usually in the form of a key:'<node_module_name>' such as `_: 'lodash'`
- **DefinePlugin**: for specifying a simple bundle-global constant values (i.e. usually a string, number, or boolean), such as `NODE_ENV: 'production'` available app-wide simply by the variable name `NODE_ENV`
\ No newline at end of file
Clone repository
  • angular
  • cookbook forms
  • cookbook routing
  • data store
  • gotchas
  • Home
  • modals
  • sass with bem
  • toolbox
  • typescript
  • webpack