关于vue异步组件加载,webpack打包生成.js文件,以及浏览器加载.js文件的一些迷惑,请求help!!!

新手上路,请多包涵

如下代码中,有两个问题看了几遍文档也无法理解

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怎么知道要加载哪个模块呢?

这几天把我头都整晕了,看了好多博客文档,也没理清楚这其中的联系,希望有过来人帮帮小弟,感激不尽!!!

阅读 2k
1 个回答

你这样写当然也可以,但现在vue最新文档给的方案是使用dynamic import

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题