[email protected]使用手册-v1.0.0

目录
  • 开始使用
  • 管理依赖
  • 管理资源
    • 样式
    • 图片
    • 字体
    • 数据
  • 管理输出
    • 内容注入
    • 清理目录
    • 文件清单
  • 代码分离
    • 多个入口
    • 提取模板
    • 动态导入
    • 公共类库
    • 三方类库
    • 异步类库
  • 分析输出
  • 管理缓存
    • 文件指纹
    • 内容摘要
    • 提取样板
    • 模块标识
  • 模块刷新
  • 开发环境
    • 错误追踪
    • 资源映射
    • 自动编译
    • 文件监控
    • 自动刷新
  • 产品环境
    • 错误追踪
    • 代码压缩
    • 文件指纹
  • 环境标识
  • 公共路径
  • 构建性能

开始使用

mkdir webpack-demo && cd webpack-demo
npm init -y
npm install --save-dev [email protected]

管理依赖

为什么要?
如果导入模块时requrie 含有表达式﴾expressions﴿,会创建一个上下文﴾context﴿,因为在编译时﴾compile time﴿并不清楚具体是哪一个模块被导入。这会导致所有可能用到的模块都包含在 bundle 中。
require("./template/" + name + ".ejs");
方法选择?
可以使用 require.context() 方法来创建自己的(模块)上下文。给这个方法传 3 个参数:要搜索的文件夹目录,是否还应该搜索它的子目录,以及一个匹配文件的正则表达式。
require.context(directory, useSubdirectories = false, regExp = /^.//)
使用 require.context() 方法来创建自己的(模块)上下文,每个模块上下文有 3 个属性: resolve , keys , id 。 resolve 是一个函数,它返回请求被解析后得到的模块 id。 keys 也是一个函数,它返回一个数组,由所有可能被上下文模块处理的请求组成。id 是上下文模块里面所包含的模块 id. 可能在你使用 module.hot.accept 的时候被用到。
如何进行?
准备收集需要创建的模块上下文

//inex.js
var cache = {};
function importAll(r) {
        r.keys().forEach(key => cache[key] = r(key));
}

使用require.context()创建上下文

//index.js
importAll(require.context('../components/', true, /\.js$/));
// 在构建时,所有被 require 的模块都会被存到cache 里面。

管理资源

为什么要?
动态打包 (dynamically bundle)所有依赖项(创建所谓的依赖图﴾dependency graph﴿)。这是极好的创举,因为现在每个模块都可以明确表述它自身的依赖,我们将避免打包未使用的模块。
可以以更直观的方式将模块和资源组合在一起。无需依赖于含有全部资源的 /assets 目录,而是将资源与代码组合在一起。会使代码更具备可移植性。
方法选择?
加载样式:style‐loader 、css‐loader
加载图片:file‐loader、url-loader
加载字体:file‐loader、url-loader
加载数据:file‐loader、csv‐ loader、xml‐loader
如何进行?
通过加载器在js模块引入非js文件。从 JavaScript 模块中 import一个 CSS 文件,使用style‐loader 和 css‐loader。在依赖于此样式的文件中 import './style.css'(声明依赖) 。现在,当该模块运行时,含有 CSS 字符串的