在vue中使用import()来代替require.ensure()实现代码打包分离

一、require.ensure() 方法来实现代码打包分离

require.ensure() 是 webpack 特有的,已经被 import() 取代。

给定 dependencies 参数,将其对应的文件拆分到一个单独的 bundle 中,此 bundle 会被异步加载。 当使用 CommonJS 模块语法时,这是动态加载依赖的唯一方法。 意味着,可以在模块执行时才运行代码, 只有在满足某些条件时才加载依赖项。 这个特性依赖于内置的 Promise。如果想在低版本浏览器使用 require.ensure, 记得使用像 es6-promise 或者 promise-polyfill 这样 polyfill 库, 来预先填充(shim) Promise 环境。

按照上面指定的顺序,webpack 支持以下参数:

  • dependencies:字符串构成的数组,声明 callback 回调函数中所需的所有模块。

  • callback:只要加载好全部依赖,webpack 就会执行此函数。require 函数的实现, 作为参数传入此函数。当程序运行需要依赖时,可以使用 require() 来加载依赖。函数体可以使用此参数,来进一步执行  require()模块。

  • errorCallback:当 webpack 加载依赖失败时,会执行此函数。

  • chunkName:由 require.ensure()创建出的 chunk 的名字。通过将同一个 chunkName传递给不同的 require.ensure() 调用,我们可以将它们的代码合并到一个单独的 chunk 中,从而只产生一个浏览器必须加载的 bundle。

虽然我们将 require 的实现,作为参数传递给回调函数,然而如果使用随意的名字, 例如 require.ensure([], function(request) { request(‘someModule’); })  则无法被 webpack 静态解析器处理,所以还是请使用 require,例如 require.ensure([], function(require) { require(‘someModule’); })。

二、在vue中使用import()来代替require.ensure()实现代码打包分离

有时候我们想把某个路由下的所有组件都打包在同个异步块 (chunk) 中。 只需要使用 命名 chunk,一个特殊的注释语法来提供 chunk name (需要 Webpack > 2.4)。

Webpack 会将任何一个异步模块与相同的块名称组合到相同的异步块中。

例:require.ensure()实现

例:import()实现

打赏 赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

评论

电子邮件地址不会被公开。