cheatsheets/webpack.md

203 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

2014-03-26 04:09:02 +00:00
---
title: Webpack
2015-11-24 05:09:17 +00:00
category: JavaScript libraries
2017-09-26 07:29:08 +00:00
updated: 2017-09-26
intro: |
This is a very basic "getting started with Webpack" guide for use with [Webpack](https://webpack.js.org) v3. This doesn't cover all features, but it should get you started in understanding the config file format.
2014-03-26 04:09:02 +00:00
---
2017-09-26 07:29:08 +00:00
### Basic config
2014-03-26 04:09:02 +00:00
2017-09-26 07:29:08 +00:00
#### webpack.config.js
2014-03-26 04:09:02 +00:00
2017-09-26 07:29:08 +00:00
```js
module.exports = {
context: __dirname,
entry: 'src/app.js',
output: {
path: __dirname + '/public',
filename: 'app.js'
}
}
```
2014-03-26 04:09:02 +00:00
2017-09-26 07:29:08 +00:00
#### Terminal
2014-03-26 04:09:02 +00:00
2017-09-26 07:29:08 +00:00
```bash
npm install --save-dev webpack
```
2014-03-26 04:09:02 +00:00
2017-09-26 07:29:08 +00:00
| `webpack` | build
| `webpack -- -p` | build production
| `webpack -- --watch` | compile continuously
2014-04-01 07:59:39 +00:00
2017-09-26 07:29:08 +00:00
This compiles `src/app.js` into `public/app.js`. (Note: you may need to use `./node_modules/.bin/webpack` as a command if you're not invoking Webpack via npm scripts.)
2014-04-01 07:59:39 +00:00
2017-09-26 07:29:08 +00:00
### Multiple files
2014-04-01 07:59:39 +00:00
2017-09-26 07:29:08 +00:00
#### webpack.config.js
2014-04-01 07:59:39 +00:00
2017-09-26 07:29:08 +00:00
```js
module.exports = {
entry: {
app: 'src/app.js',
vendor: 'src/vendor.js'
},
output: {
path: __dirname + '/public',
filename: '[name].js'
}
}
```
{: data-line="2,3,4,8"}
2014-04-01 07:59:39 +00:00
2017-09-26 07:29:08 +00:00
This creates `app.js` and `vendor.js`.
## Loaders
### Babel
#### Terminal
```bash
npm install --save-dev \
babel-loader \
babel-preset-env \
babel-preset-react
```
#### webpack.config.js
```js
module.exports = {
···
module: {
rules: [
{ test: /\.js$/,
exclude: /node_modules/,
use: [
{ loader: 'babel-loader' }
]
2014-04-01 07:59:39 +00:00
}
2017-09-26 07:29:08 +00:00
]
}
}
```
{: data-line="3,4,5,6,7,8"}
#### .babelrc
```js
{
"presets": [ "env", "react" ]
}
```
Adds support for [Babel](http://babeljs.io).
### CSS
#### Terminal
```bash
npm install --save-dev \
css-loader \
style-loader
```
#### webpack.config.js
```js
module.exports = {
···
module: {
rules: [
{ test: /\.css$/,
exclude: /node_modules/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' }
]
2014-04-01 07:59:39 +00:00
}
2017-09-26 07:29:08 +00:00
]
}
}
```
{: data-line="3,4,5,6,7,8,9"}
#### Your JavaScript
```js
import './styles.css'
// or:
require('./styles.css')
```
This allows you to use CSS inside your JavaScript. This packages your CSS inside your JavaScript bundle.
### PostCSS
#### Terminal
```
npm install --save-dev \
postcss-loader \
postcss-cssnext
```
#### webpack.config.js
```js
···
// Inside module.rules[]:
{ test: /\.css$/,
exclude: /node_modules/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' },
{ loader: 'postcss-loader' }
···
```
{: data-line="8"}
#### postcss.config.js
```js
module.exports = {
plugins: [
require('postcss-cssnext')()
]
}
```
{: data-line="3"}
This example adds [postcss-cssnext](https://www.npmjs.com/package/postcss-cssnext) support to your CSS files.
## Other features
### Dev server
#### package.json
```json
{ ···
"scripts": {
"dev": "webpack-dev-server"
}
}
```
{: data-line="3"}
#### Terminal
```bash
npm install --save-dev \
webpack-dev-server
```
```bash
npm run dev
```
2014-04-01 07:59:39 +00:00
2017-09-26 07:29:08 +00:00
This starts an HTTP server for development (port 8080 by default).