鍍金池/ 問答/HTML5  HTML/ 關(guān)于vue異步組件加載,webpack打包生成.js文件,以及瀏覽器加載.js文

關(guān)于vue異步組件加載,webpack打包生成.js文件,以及瀏覽器加載.js文件的一些迷惑,請(qǐng)求help!?。?/h1>

如下代碼中,有兩個(gè)問題看了幾遍文檔也無法理解

component: r => require.ensure([], () => r(require('../page/item/item.vue')), 'item')

1.require.ensure()第一個(gè)參數(shù)到底有什么用?瀏覽器又是依據(jù)什么去加載.js模塊文件的?

webpack文檔對(duì)require.ensure()前兩個(gè)參數(shù)的解釋如下:

dependencies:一組字符串,聲明callback要執(zhí)行的代碼所需的所有模塊。
callback:加載依賴項(xiàng)后webpack將執(zhí)行的函數(shù)。該require函數(shù)的實(shí)現(xiàn)作為參數(shù)發(fā)送到此函數(shù)。函數(shù)體可以使用它來進(jìn)一步require()執(zhí)行所需的模塊。

這里的callback說是加載依賴項(xiàng)后才執(zhí)行,就是說加載dependencies后執(zhí)行callback吧,那為什么我們一般第一個(gè)參數(shù)傳個(gè)空數(shù)組呢?既然dependencies為空那豈不是說什么都沒加載就執(zhí)行了callback,那webpack依據(jù)什么去生成模塊文件.js文件呢?

require()方法是導(dǎo)入組件,我認(rèn)為瀏覽器中得先要有模塊文件.js文件才能調(diào)用require()方法將組件導(dǎo)入進(jìn)來吧?然而除了require方法的參數(shù)中有聲明我需要的組件path,其他地方都沒有,瀏覽器怎么預(yù)先知道我需要的是哪個(gè)模塊文件.js文件呢?

2.resolve回調(diào)到底在什么時(shí)候調(diào)用?

通過看vue的文檔,我大概知道了,組件渲染時(shí)會(huì)調(diào)用component中的工廠函數(shù),但是文檔中說:

resolve這個(gè)回調(diào)函數(shù)會(huì)在你從服務(wù)器得到組件定義的時(shí)候被調(diào)用

不太明白”從服務(wù)器得到組件定義的時(shí)候“到底指的是什么時(shí)候?

組件定義為什么要從服務(wù)器得到?難道webpack打包生成的.js文件是存放在服務(wù)器上的?得到組件定義是指模塊文件.js文件加載完成的時(shí)候嗎?如果是這樣的話,那上面那行代碼為例,我都沒告訴webpack我需要哪個(gè)模塊(我是在resolve回調(diào)方法中才表面我需要哪個(gè)模塊,而resolve是在模塊文件.js加載完成才調(diào)用的),webpack怎么知道要加載哪個(gè)模塊呢?

這幾天把我頭都整暈了,看了好多博客文檔,也沒理清楚這其中的聯(lián)系,希望有過來人幫幫小弟,感激不盡?。?!

回答
編輯回答
故林

你這樣寫當(dāng)然也可以,但現(xiàn)在vue最新文檔給的方案是使用dynamic import

2018年1月9日 01:39