在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 我好奇在用vue時,使用webpack管理項目時,同一模塊會被不同文件(impo

我好奇在用vue時,使用webpack管理項目時,同一模塊會被不同文件(import)導(dǎo)入,這樣不會重復(fù)加載嗎?

比如:
在main.js里import導(dǎo)入vue,在里也import導(dǎo)入vue;
而index.js又被main.js引用。

回答
編輯回答
祈歡

不會 既然是引用
如果vue的路徑不發(fā)生變化自然不會重復(fù)加載

2018年1月1日 17:11
編輯回答
膽怯

不會重復(fù)打包,但是針對非全局模塊會異步加載

webpack使用了tree-shaking,打包時會先遍歷一邊你的項目,把依賴的模塊取出來,再打包,這個過程中已經(jīng)去除了不同文件引用的同樣的包,這個過程保證了了不管多少個文件引入vue,都只會打包一次。

然后會把全局依賴模塊比如 vue 等打包到一個公共文件中,默認為 vendor.*.js
會把你頁面依賴的非全局模塊,比如你項目的文件,即需要異步加載的模塊關(guān)系打包進 manifest.*.js。
然后才是真正的項目的文件,分別打包進 d+.*.js

如下圖所示。

clipboard.png

2018年1月20日 17:11
編輯回答
情皺

不會,如果你看過打包過之后的文件的話,不僅不會重復(fù)加載兩邊,甚至第二遍讀的是第一遍執(zhí)行結(jié)果的緩存。

簡單舉個例子可以驗證:

// timer.js
export const timer = new Date()
//a.js
import { timer } from './time'
console.log(timer)
// index.js
import './a'
import { timer } from './time'
console.log(timer)

如果兩次引入 timer 重復(fù)加載的話,index.js 的打包結(jié)果兩次的 log 結(jié)果是不同的,但事實上兩次的結(jié)果是相同的。

下面是 webpack 打包結(jié)果的入口函數(shù),會對所有模塊通過 id 進行標(biāo)注,并且加載之后緩存

/******/     var installedModules = {};
/******/
/******/     // The require function
/******/     function __webpack_require__(moduleId) {
/******/
/******/         // 通過 id 緩存模塊,如果之前已經(jīng)通過 __webpack__require__ 加載過,就直接讀了緩存
/******/         if(installedModules[moduleId]) {
/******/             return installedModules[moduleId].exports;
/******/         }
            }
2018年7月24日 13:43
編輯回答
青瓷

感謝大家的積極回應(yīng),非常感謝!

2017年9月12日 01:19