国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解webpack import()動態(tài)加載模塊踩坑

2019-11-19 13:28:38
字體:
供稿:網(wǎng)友

import

webpack根據(jù)ES2015 loader 規(guī)范實現(xiàn)了用于動態(tài)加載的import()方法。

這個功能可以實現(xiàn)按需加載我們的代碼,并且使用了promise式的回調(diào),獲取加載的包。

在代碼中所有被import()的模塊,都將打成一個單獨的包,放在chunk存儲的目錄下。在瀏覽器運(yùn)行到這一行代碼時,就會自動請求這個資源,實現(xiàn)異步加載。

這里是一個簡單的demo。

import('lodash').then(_ => {  // Do something with lodash (a.k.a '_')... })

可以看到,import()的語法十分簡單。該函數(shù)只接受一個參數(shù),就是引用包的地址,這個地址與es6的import以及CommonJS的require語法用到的地址完全一致。可以實現(xiàn)無縫切換【寫個正則替換美滋滋】。

并且使用了Promise的封裝,開發(fā)起來感覺十分自在。【包裝一個async函數(shù)就更爽了】

然而,以上只是表象。

只是表象。

我在開發(fā)的時候就遇到了問題。場景是這樣的:一個對象,存儲的是各級的路由信息,及其對應(yīng)的頁面組件。為減少主包大小,我們希望動態(tài)加載這些頁面。

同時使用了react-loadable來簡化組件的懶加載封裝。代碼如下所示。

function lazyLoad(path) { return Loadable({  loader: () => import(path),  loading: Spin, });}

然后我就開始開心的在代碼中寫上lazyLoad('./pages/xxx')。果不其然,掛了。瀏覽器表示,沒有魚丸沒有粗面,也不知道這個傻逼模塊在哪里。

于是我查看了官方文檔,發(fā)現(xiàn)有一個黃條提示。

emmm,看來問題出在這里了。

這個現(xiàn)象其實是與webpack import()的實現(xiàn)高度相關(guān)的。由于webpack需要將所有import()的模塊都進(jìn)行單獨打包,所以在工程打包階段,webpack會進(jìn)行依賴收集。

此時,webpack會找到所有import()的調(diào)用,將傳入的參數(shù)處理成一個正則,如:

import('./app'+path+'/util') => /^/.//app.*//util$/

也就是說,import參數(shù)中的所有變量,都會被替換為【.*】,而webpack就根據(jù)這個正則,查找所有符合條件的包,將其作為package進(jìn)行打包。

因此,如果我們直接傳入一個變量,webpack就會把 (整個電腦的包都打包進(jìn)來[不鬧]) 認(rèn)為你在逗他,并且拋出一個WARNING: Critical dependency: the request of a dependency is an expression。

所以import的正確姿勢,應(yīng)該是盡可能靜態(tài)化表達(dá)包所處的路徑,最小化變量控制的區(qū)域

如我們要引用一堆頁面組件,可以使用import('./pages/'+ComponentName),這樣就可以實現(xiàn)引用的封裝,同時也避免打包多余的內(nèi)容。

另外一個影響功能封裝的點,是import()中的相對路徑,是import語句所在文件的相對路徑,所以進(jìn)一步封裝import時會出現(xiàn)一些麻煩。

因為import語句中的路徑會在編譯后被處理成webpack命令執(zhí)行目錄的相對路徑.

友情鏈接:https://webpack.js.org/api/module-methods/#import

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 富宁县| 昭苏县| 红河县| 康定县| 英山县| 尚义县| 沧州市| 凯里市| 南岸区| 青冈县| 龙胜| 秦皇岛市| 宁陵县| 梓潼县| 尉氏县| 新和县| 汶川县| 武宣县| 塔河县| 盐边县| 自贡市| 刚察县| 元谋县| 吉安县| 石台县| 新巴尔虎右旗| 崇礼县| 仁寿县| 交城县| 满城县| 永登县| 双城市| 河间市| 眉山市| 洛浦县| 五常市| 贵德县| 宝兴县| 团风县| 石景山区| 陵川县|