Webapck学习概览

根据Webpack官方文档进行的总结

1. Getting Started

当某个html需要引入多个js文件时,各js文件间可能存在依赖关系:

//  /src/a.js
funtion test(){
  ...
}

//  /src/b.js
test();

//  /dist/index.html
//  必须在b.js之前引入a.js, 否则test函数未定义
<script type="text/javascript" src="../src/a.js">
<script type="text/javascript" src="../src/b.js">

通过Webpack,在js文件内部的最开始处可以通过 import xx from 'xx' 的形式定义这种依赖,然后使用webpack打包出一个最终文件直接引用:

//  /src/a.js
export default function test() {
  ...
}

//  /src/b.js
import test from './a.js'
test();

// /webpack.config.js
const path = require('path');

module.exports = {
  entry: './src/b.js',
  output: {
    filename: './bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
}

//  /dist/index.html
<script type="text/javascript" src="bundle.js"></script>

在命令行执行 ./node_modules/.bin/webpack 可以运行webpack(可以通过config参数指定配置文件,默认使用webpack.config.js)。在 package.json 配置后可直接通过 npm run build 运行:

//  package.json
...
"scripts": {
  ...
  "build": "webpack",
  ...
},
...

2. Asset Management

除了js文件外,webpack通过各种loader能够处理css/pic/font等各种类型的文件。以css为例,在上一节的基础上,在 src 文件夹下新增 style.css 文件:

//  /scr/style.css
body{
  background: green;
}

npm install 一下需要的loader:

npm install --save-dev style-loader css-loader

修改webpack配置文件, 在module.exports中增加module:

module: {
  rules: [
    {
      test: /\.css$/,
      use: [
        'style-loader',
        'css-loader'
      ]
    }
  ]
  }

在b.js中增加对该css的引用:

...
import './style.css'
...

执行 npm run build 后会在 /dist 下重新生成一个 bundle.js,该js会把css引入到使用了这个js的html中。

//  /dist/index.html和之前一样,仅做了一个引入bundle.js的行为
<script type="text/javascript" src="bundle.js"></script>

最后打开index.html,可以看到该css被自动载入到了 <head> 标签中