Webpack

Webpack 是现代 JavaScript 应用的静态模块打包工具。Webpack 非常适合处理模块化组织的代码,它支持前端开发中的多种模块方案,例如:

  • ES6 模块系统,如 import 语句
  • CommonJS 模块系统,例如 require() 语句
  • AMD 风格的模块系统,如 definerequire 语句
  • css/sass/less 文件中的 @import 语句
  • 样式表里对图片文件的依赖声明,也可以被 webpack 处理为模块,例如 background: url(...),甚至 HTML 文件中的图片元素(<img src=...>

基本概念

入口(Entry)

入口点(Entry Point)通常是某些特定的文件或目录,对于每个入口文件,webpack 会从它开始进行依赖分析,每个找到的文件会被处理为中间结果(bundles)。Webpack 支持设置单个或多个入口点。

输出目录(Output)

Webpack 配置对象的 output 属性用于指定构建后的文件存放目录,以及如何去命名这些文件(例如在文件名中添加摘要值)。

加载器(Loaders)

Webpack 自身可以只处理 JavaScript 模块,通过 Loaders 则可以处理其他类型的文件(例如 CSS/Image)。如果配置了 css-loader,那么你的代码里就可以通过 import 语句来声明该组件所依赖的样式表,webpack.config.js 做类似这样的声明:

/**
 * 需要安装 `css-loader` 和 `style-loader`
 */
module.exports = {
  module: {
    rules: [{
      test: /\.css$/,
      use: [ 'style-loader', 'css-loader' ]
    }]
  }
};
module.exports = config;

组件代码就可以这样写了:

import css from 'file.css';
// 或者
import 'file.css';

插件(Plugins)

依赖分析

JavaScript 模块的依赖分析是 webpack 的核心流程之一。

常见的 loaders

如何实现一个 loader

参考 Webpack 官网 Writing a Loader。Loader 的本质是一个函数,Webpack 会在解析到匹配的文件时调用这个函数去加载文件内容。

常见的插件

HtmlWebpackPlugin

ExtractTextWebpackPlugin

参考资料

  1. HtmlWebpackPlugin | github
  2. ExtractTextWebpackPlugin | github