如下代码中,有两个问题看了几遍文档也无法理解
component: r => require.ensure([], () => r(require('../page/item/item.vue')), 'item')
1.require.ensure()第一个参数到底有什么用?浏览器又是依据什么去加载.js模块文件的?
webpack文档对require.ensure()前两个参数的解释如下:
dependencies:一组字符串,声明callback要执行的代码所需的所有模块。
callback:加载依赖项后webpack将执行的函数。该require函数的实现作为参数发送到此函数。函数体可以使用它来进一步require()执行所需的模块。
这里的callback说是加载依赖项后才执行,就是说加载dependencies后执行callback吧,那为什么我们一般第一个参数传个空数组呢?既然dependencies为空那岂不是说什么都没加载就执行了callback,那webpack依据什么去生成模块文件.js文件呢?
require()方法是导入组件,我认为浏览器中得先要有模块文件.js文件才能调用require()方法将组件导入进来吧?然而除了require方法的参数中有声明我需要的组件path,其他地方都没有,浏览器怎么预先知道我需要的是哪个模块文件.js文件呢?
2.resolve回调到底在什么时候调用?
通过看vue的文档,我大概知道了,组件渲染时会调用component中的工厂函数,但是文档中说:
resolve这个回调函数会在你从服务器得到组件定义的时候被调用
不太明白”从服务器得到组件定义的时候“到底指的是什么时候?
组件定义为什么要从服务器得到?难道webpack打包生成的.js文件是存放在服务器上的?得到组件定义是指模块文件.js文件加载完成的时候吗?如果是这样的话,那上面那行代码为例,我都没告诉webpack我需要哪个模块(我是在resolve回调方法中才表面我需要哪个模块,而resolve是在模块文件.js加载完成才调用的),webpack怎么知道要加载哪个模块呢?
这几天把我头都整晕了,看了好多博客文档,也没理清楚这其中的联系,希望有过来人帮帮小弟,感激不尽!!!
你这样写当然也可以,但现在vue最新文档给的方案是使用dynamic import