代码分割

对于大型web app来说,把所有的代码打包到一个文件里面显然是不高效的,如果有一些代码块只在特定情况下才需要加载的话,这样做就更不合适了。Webpack针对这个问题有一个叫做代码分割的方法,这个方法把你的代码分割成块,按需加载。

代码分割是一个可选的功能,由你来决定分割点,webpack会解决依赖、输出、运行时的问题。必须要要澄清一个误会,代码分割不自是把共用的代码提取出来打成一个包。Webpack更强大的地方是把代码分割成块之后按需加载,这样一来初始加载时间会更短,而且所有代码块都只在请求的时候下载。

确定分割点

AMD和CommomJS有不同的方法来加载代码。

CommonJS

    require.ensure(dependencies,callback)

require.ensure方法可以确保在调用callback的时候能同步加载依赖,callback以require为参数。 举个例子:

    require.ensure(['module-a','module-b'],function(require){
        var a = require("module-a");
        //...
    })

注意:require.ensure只会加载模块,不会计算模块。

require(AMD)

    require(dependencies,callback)

调用的时候,所有的依赖都被加载。 举个例子:

    require(["module-a","module-b"],function(a,b){
        //...
    })

注意:AMD的require方法会加载并计算模块,从左至右计算。 callback可以省略。

代码块的内容

所有在分割点上的依赖都会变成一个新的代码块。如果你把你一个函数表达式作为分割点的回调,webpack会自动把函数里所有的依赖都加到代码块里。

代码块的优化

  • 如果两个代码块包含同一个模块,它们将会合并成一个代码块。
  • 如果一个模块在它的所有的父代码块都可以access,那么模块将被从移除。

代码块的加载

代码块的类型