成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

commonJs原理解析

Flands / 1310人閱讀

摘要:同步加載先使用注冊文件路徑和對應(yīng)方法之間的映射關(guān)系保存在中再使用方法,通過傳入的路徑去中取出對應(yīng)的方法使用獲取方法的同時(shí),會(huì)觸發(fā)依賴模塊中的方法,這樣就實(shí)現(xiàn)了模塊的加載異步加載異步加載異步加載的邏輯匜不復(fù)雜,在同步加載的

同步加載

先使用require.register注冊文件路徑和對應(yīng)方法之間的映射關(guān)系保存在require.modules中

再使用require方法,通過傳入的路徑去require.modules中取出對應(yīng)的方法

使用require獲取方法的同時(shí),會(huì)觸發(fā)依賴模塊中的require方法,這樣就實(shí)現(xiàn)了模塊的加載

index.html





    
    
    
    Document



    
    
    
    
    

commonJS.js

function require(path) {
    let mod = require.modules[path];
    mod.exports = {};
    mod.call(window, require, mod, mod.exports);
    return mod.exports;
}

require.modules = {};

require.register = function (path, fn) {
    // 異步加載
    require.modules[path] = fn;
}

hello.js、name.js

//hello.js
require.register("hello.js", function (require, module, exports) {
    let name = require("name.js")
    exports.hello_name = "hello " + name;
    exports.hello_world = "hello world";
})
//name.js
require.register("name.js", function (require, module, exports) {
    module.exports = "shimingw"
})
異步加載

異步加載的邏輯匜不復(fù)雜,在同步加載的基礎(chǔ)上增加require.ensure方法,預(yù)先在modules對象上掛在onload方法

修改require.register方法,增加異步模塊注冊邏輯,在異步模塊注冊完成后觸發(fā)onload,以達(dá)到模塊異步加載的需求

commonJS_async.js

function require(path) {
    let mod = require.modules[path].method;
    mod.exports = {};
    mod.call(window, require, mod, mod.exports);
    return mod.exports;
}

require.modules = {};

require.register = function (path, fn) {
    // 異步加載
    if (require.modules[path] && require.modules[path].status === "loading") {
        // 異步加載成功
        require.modules[path].status = "loaded"
        require.modules[path].method = fn;
        require.modules[path].onload(require(path));
    } else {
        require.modules[path] = {
            moduleName: path, // 模塊Id
            status: "loaded",
            onload: null,
            method: fn
        };
    }
}

require.ensure = function (path, cb) {
    require.modules[path] = {
        moduleName: path, // 模塊Id
        status: "loading",
        onload: cb,
        method: null
    };
    var head = document.querySelector("head")
    var script = document.createElement("script");
    script.async = true;
    script.src = path;
    setTimeout(() => {
        head.appendChild(script);
    },5000 );
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/97714.html

相關(guān)文章

  • 最全的前端模塊化方案

    摘要:模塊化主要是用來抽離公共代碼,隔離作用域,避免變量沖突等。將一個(gè)復(fù)雜的系統(tǒng)分解為多個(gè)模塊以方便編碼。順手寫一個(gè)省略省略實(shí)現(xiàn)此時(shí)的對應(yīng)的形式解析省略執(zhí)行兼容,模塊化語法。 模塊化主要是用來抽離公共代碼,隔離作用域,避免變量沖突等。將一個(gè)復(fù)雜的系統(tǒng)分解為多個(gè)模塊以方便編碼。 會(huì)講述以下內(nèi)容 CommonJS AMD 及 核心原理實(shí)現(xiàn) CMD 及 核心原理實(shí)現(xiàn) UMD 及 源碼解析 ES6...

    antz 評論0 收藏0
  • 【Node】前后端模塊規(guī)范與模塊加載原理

    摘要:例如指定一些依賴到模塊中實(shí)現(xiàn)規(guī)范的模塊化,感興趣的可以查看的文檔。 CommonJS 定義了 module、exports 和 require 模塊規(guī)范,Node.js 為了實(shí)現(xiàn)這個(gè)簡單的標(biāo)準(zhǔn),從底層 C/C++ 內(nèi)建模塊到 JavaScript 核心模塊,從路徑分析、文件定位到編譯執(zhí)行,經(jīng)歷了一系列復(fù)雜的過程。簡單的了解 Node 模塊的原理,有利于我們重新認(rèn)識(shí)基于 Node 搭建的...

    jsyzchen 評論0 收藏0
  • 解析 Webpack中import、require、按需加載的執(zhí)行過程

    摘要:但是瀏覽器是不識(shí)別這個(gè)關(guān)鍵詞的所以會(huì)對的代碼進(jìn)行解釋首先給設(shè)定導(dǎo)出的值如果是會(huì)直接賦值給如果是其他形式則給的導(dǎo)出的設(shè)定一個(gè)該的返回值就是導(dǎo)出的結(jié)果而對于來說整個(gè)執(zhí)行過程其實(shí)過程和是一樣的。 最近由于一篇分享手淘過年項(xiàng)目中采用到的前端技術(shù)的影響,重新研究了一下項(xiàng)目中CSS的架構(gòu).本來打算寫一篇文章,但是寫到一半突然發(fā)現(xiàn)自己像在寫文檔介紹一樣,所以后來就放棄了。但是覺得過程中研究的 Web...

    caozhijian 評論0 收藏0
  • 新鮮出爐的8月前端面試題

    摘要:前言最近參加了幾場面試,積累了一些高頻面試題,我把面試題分為兩類,一種是基礎(chǔ)試題主要考察前端技基礎(chǔ)是否扎實(shí),是否能夠?qū)⑶岸酥R(shí)體系串聯(lián)。 前言 最近參加了幾場面試,積累了一些高頻面試題,我把面試題分為兩類,一種是基礎(chǔ)試題: 主要考察前端技基礎(chǔ)是否扎實(shí),是否能夠?qū)⑶岸酥R(shí)體系串聯(lián)。一種是開放式問題: 考察業(yè)務(wù)積累,是否有自己的思考,思考問題的方式,這類問題沒有標(biāo)準(zhǔn)答案。 基礎(chǔ)題 題目的答...

    qingshanli1988 評論0 收藏0
  • JavaScript模塊化發(fā)展

    摘要:所有依賴這個(gè)模塊的語句,都定義在一個(gè)回調(diào)函數(shù)中,等到所有依賴加載完成之后前置依賴,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。如果將前面的代碼改寫成形式,就是下面這樣定義了一個(gè)文件,該文件依賴模塊,當(dāng)模塊加載完畢之后執(zhí)行回調(diào)函數(shù),這里并沒有暴露任何變量。 模塊化是我們?nèi)粘i_發(fā)都要用到的基本技能,使用簡單且方便,但是很少人能說出來但是的原因及發(fā)展過程?,F(xiàn)在通過對比不同時(shí)期的js的發(fā)展,將JavaScript模...

    mengbo 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<