require.context()在实际开发中,大部分人都是采用组件化的方式进行开发。然后还有很多组件需要引入。例如以下场景:importoutExperInfofrom"@/components/userInfo/outExperInfo";importbaseUserInfofrom"@/components/userInfo/baseUserInfo";importtechnicalExperInfofrom"@/components/userInfo/technicalExperInfo";importskillExperInfofrom"@/components/userInfo/skillcomponents:》写成{outExperInfo,baseUserInfo,technicalExperInfo,skillExperInfo}没有错,但是仔细观察发现写了很多重复的代码。这时候使用require.context()可以写成:constpath=require('path')constfiles=require.context('@/components/userInfo',false,/\.vue$/)constuserComponents={}files.keys().forEach(key=>{constname=path.basename(key,'.vue')userComponents[name]=files(key).default||files(key)})components:userComponents这个方法可以无论需要引入多少组件,都可以使用。路由的按需加载随着项目功能模块的增加,导入的文件数量急剧增加。如果不做任何处理,首屏加载会很慢。这时候路由的按需路由就登场了。当webpack<2.4{path:'/',name:'home',components:resolve=>require(['@/components/home'],resolve)}当webpack>2.4{path:'/',name:'home',components:()=>import('@/components/home')}import()方法是es6提出的,动态加载返回一个Promise对象,then方法的参数是加载的模块。与Node.js的require方法类似,主要的import()方法是异步加载的。动态组件场景:如果项目中有tab切换的需求,那么就会涉及到组件的动态加载。一般的写法是这样的:下一个组件将被重新加载。会消耗很多性能,所以它起作用了。
