vue项目实现按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()

1. vue异步组件技术
  • vue-router配置路由,使用vue的异步组件技术,能够实现按需加载。

可是,这种状况下一个组件生成一个js文件。
举例以下:html

{
            path: '/promisedemo',
            name: 'PromiseDemo',
            component: resolve => require(['../components/PromiseDemo'], resolve)
        }

2. es提案的import()vue

vue官方文档:路由懒加载(使用import())webpack

  • vue-router配置路由,代码以下:
const notFound = () => import(/* webpackChunkName: "index" */ '@views/common/404')
const login = () => import(/* webpackChunkName: "index" */ '@views/common/login')
const register = () => import(/* webpackChunkName: "index" */ '@views/common/register')
const main = () => import(/* webpackChunkName: "index" */ '@views/main')
const myWorks = () => import(/* webpackChunkName: "my" */ '@views/my/index')
const myAccountSetting = () => import(/* webpackChunkName: "my" */ '@views/my/account-setting')
const makeIndex = () => import(/* webpackChunkName: "make" */ '@views/make/index')

 

3. webpack提供的require.ensure()web

在webpack 2的官网上写了这么一句话:vue-router

              require.ensure() is specific to webpack and superseded by import().api

    因此,在webpack 2里面应该是不建议使用require.ensure()这个方法的。可是目前该方法仍然有效,因此能够简单介绍一下。包括在webpack 1中也是能够使用。下面是require.ensure()的语法:数组

require.ensure(dependencies: String[], callback: function(require), errorCallback: function(error), chunkName: String)
 require.ensure()接受三个参数:promise

第一个参数的依赖关系是一个数组,表明了当前须要进来的模块的一些依赖
第二个参数回调就是一个回调函数其中须要注意的是,这个回调函数有一个参数要求,经过这个要求就能够在回调函数内动态引入其余模块值得注意的是,虽然这个要求是回调函数的参数,理论上能够换其余名称,可是其实是不能换的,不然的的的的WebPack就没法静态分析的时候处理它; 
第三个参数errorCallback比较好理解,就是处理错误的回调; 
第四个参数chunkName则是指定打包的组块名称。异步

  • vue-router配置路由,使用webpack的require.ensure技术,也能够实现按需加载。

这种状况下,多个路由指定相同的chunkName,会合并打包成一个js文件。
举例以下:ide

const notFound = r => require.ensure([], () => r(require('@views/common/404')), 'index')
const login = r => require.ensure([], () => r(require('@views/common/login')), 'index')
const register = r => require.ensure([], () => r(require('@views/common/register')), 'index')
const main = r => require.ensure([], () => r(require('@views/main')), 'index')
const myWorks = r => require.ensure([], () => r(require('@views/my/index')), 'my')
const myAccountSetting = r => require.ensure([], () => r(require('@views/my/account-setting')), 'my')
const makeIndex = r => require.ensure([], () => r(require('@views/make/index')), 'make')

 

 

 

https://blog.csdn.net/jacktesla/article/details/80796775       vue项目实现按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()

https://blog.csdn.net/sma2mmm/article/details/83827813   require.ensure()和import() 使用区分

相关文章
相关标签/搜索