在使用 webpack 對腳本進行打包, 在開發中, 每一個文件中都會使用 import 語句來導入一些功能,又會使用 export 語句導出一些功能,爲了研究 import 和 export 原理,研究了 webpack 打包後的代碼,其實原理也是很是簡單:webpack
webpack 對全部輸入文件都打包到一個文件中:web
在最終的輸出文件中,webpack 會定義一個 Object 對象,這個對象中放入了全部的輸入文件的內容, 以文件名爲 key, 文件內容(字符串)做爲值,如:函數
var modules= {};ui
modules['index'] = "源代碼";對象
modules['hello'] = '源代碼';開發
固然,webpack 會對源代碼進行必定的修改, 會把 export 語句修改成 exports.變量 = 值, 這種方法, exports 是一個參數, 大概是這樣子的:字符串
modules['index'] = (function(exports) {io
// 代碼,放在一個私有域中。console
// 經過 exports 對象,把須要公開的變量,函數,類公開出去。編譯
exports.xx = xxx;
});
這就大概是一個源文件最終的結果,變成了一個函數,那麼這個 exports 究竟是個什麼對象?其實 exports 就是一個 Object 對象,裏面沒有任何其實內容,所有是函數中設置的內容,做用只是把對象傳遞到 import 語句:
先來看看 import 的語法: import xxx from 'filename'
import 語句, 最終大概會變成這樣:
var cmp1 = require('filename');
require 函數大概的實現:
function require(id) {
if(installedModules[id]) {
return installedModules[id].exports; // 返回 exports 對象
}