Closed lin2006yuo closed 5 years ago
Code Splitting
webpack在打包的时候会将所有的资源文件都打包到一个bundle中,打包到一个bundle中会有两个问题:
webpack
bundle
这时候就需要将bundle拆开,webpack提供了三种分离代码方式
entry
SplitChunksPlugin
路由异步加载就是把不同路由对应的页面分割成不同的代码块,然后当路由被访问的时候才加载对应页面
路由异步加载通过动态导入实现,webpack官方文档提供了两种动态导入的方式
动态导入
import()
import('./async.js')
require.ensure
require.ensure([], function(require){ let asyncBundle = require('./async.js') })
webpack打包的时候会将这些需要动态导入的模块和它引用的所有子模块各自打包到一个bundle中,实现代码分割。 不管是import()语法或者是require.ensure,最终都会被webpack编译成__webpack_require__, __webpack_require__是webpack内部实现模块导入的函数,可以说webpack统一了各种js模块机制:
__webpack_require__
除了支持上诉三种js模块化语法外,webpack还有自己特有的语法,如上面提到的require.ensure,station工程新路由使用的require.context,更多查看官网。 require.context是否支持动态导入呢?通过查阅官方api,在第四个参数传入lazy,webpack打包的时候就会把他们打到不同的bundle啦
station
require.context
lazy
const req = require.context('../js', true, /\.page\.js$/, 'lazy')
代码分离
Code Splitting
webpack
在打包的时候会将所有的资源文件都打包到一个bundle
中,打包到一个bundle
中会有两个问题:bundle
体积也会越来越大,影响页面加载。bundle
中,一些可能不会被用到的代码也会被下载下来这时候就需要将
bundle
拆开,webpack
提供了三种分离代码方式entry
配置手动地分离代码。SplitChunksPlugin
去重和分离代码异步加载
路由异步加载就是把不同路由对应的页面分割成不同的代码块,然后当路由被访问的时候才加载对应页面
路由异步加载通过
动态导入
实现,webpack
官方文档提供了两种动态导入
的方式import()
语法webpack
特有的require.ensure
语法webpack
打包的时候会将这些需要动态导入
的模块和它引用的所有子模块各自打包到一个bundle
中,实现代码分割。不管是
import()
语法或者是require.ensure
,最终都会被webpack
编译成__webpack_require__
,__webpack_require__
是webpack
内部实现模块导入的函数,可以说webpack
统一了各种js模块机制:除了支持上诉三种js模块化语法外,
webpack
还有自己特有的语法,如上面提到的require.ensure
,station
工程新路由使用的require.context
,更多查看官网。require.context
是否支持动态导入
呢?通过查阅官方api,在第四个参数传入lazy
,webpack
打包的时候就会把他们打到不同的bundle
啦