亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

模塊管理的簡單實(shí)現(xiàn)

roundstones / 1639人閱讀

摘要:模塊管理的簡單實(shí)現(xiàn)方式,為什么會(huì)有這個(gè)東西方便組織你的代碼,提高項(xiàng)目的可維護(hù)性。適用場景移動(dòng)端頁面,將注入到頁面,這樣就不用考慮模塊加載的問題,從而節(jié)省了很多的代碼,在實(shí)現(xiàn)上也更為的簡單。

模塊管理的簡單實(shí)現(xiàn)方式

Keep It Simple,Stupid

Q&A

1. 為什么會(huì)有這個(gè)東西?

方便組織你的代碼,提高項(xiàng)目的可維護(hù)性。一個(gè)項(xiàng)目的可維護(hù)性高不高,也體現(xiàn)一個(gè)程序員的水平,在如今越來越復(fù)雜的前端項(xiàng)目,這一點(diǎn)尤為重要。

2. 為什么不用requirejs,seajs等

它們功能強(qiáng)大,但是文件體積是個(gè)問題,此外還有就是業(yè)務(wù)有時(shí)候可能沒那么復(fù)雜,正如開頭所說的:keep it simple

3. 以下的實(shí)現(xiàn)從哪里來的?

這些借鑒了requirejs,seajs,commonjs等的實(shí)現(xiàn),用于真實(shí)的項(xiàng)目,穩(wěn)定運(yùn)行,效果不錯(cuò)。

4. 適用場景

移動(dòng)端頁面,將js注入到html頁面,這樣就不用考慮模塊加載的問題,從而節(jié)省了很多的代碼,在實(shí)現(xiàn)上也更為的簡單。

如果是多文件加載的話,需要手動(dòng)執(zhí)行文件加載順序,那么其實(shí)最好用庫來進(jìn)行依賴管理會(huì)好一點(diǎn)。

實(shí)現(xiàn)1
(function(global){
    var modules = {};
    var define = function (id,factory) {
        if(!modules[id]){
            modules[id] = {
                id : id,
                factory : factory
            };
        }
    };
    var require = function (id) {
        var module = modules[id];
        if(!module){
            return;
        }

        if(!module.exports){
            module.exports = {};
            module.factory.call(module.exports,require,module.exports,module);
        }

        return module.exports;
    }

    global.define = define;
    global.require = require;
})(this);

使用示例

define("Hello",function(require,exports,module){
    function sayHello() {
        console.log("hello modules");
    }
    module.exports = {
        sayHello : sayHello
    }
});

var Hello = require("Hello");
Hello.sayHello();
實(shí)現(xiàn)2
function Module(main,factory){
    var modules = {};
    factory(function(id,factory){
        modules[id] = {
            id : id,
            factory : factory,
        }
    });

    var require = function (id) {
        var module = modules[id];
        if(!module){
            return;
        }

        if(!module.exports){
            module.exports = {};
            module.factory.call(module.exports,require,module.exports,module);
        }
        return module.exports;
    }

    window.require = require;
    return require(main);
}

使用示例

Module("main",function(define){
    define("Hello",function(require,exports,module){
        function sayHello () {
            console.log("hello");
        }
        
        //有效的寫法
        module.exports = {
            sayHello : syaHello;
        }

        //或者
        exports.sayHello = sayHello;
    });
    //mian,程序入口
    define("main",function(require,exports,module){
        var Hello = require("Hello");
        Hello.sayHello();
    });
});
實(shí)現(xiàn)3

另外一種風(fēng)格的模塊管理

(function(global) {
    var exports = {}; //存儲(chǔ)模塊暴露的接口
    var modules = {}; // 
    global.define = function (id,factory) {
        modules[id] = factory;
    }
    global.require = function (id) {
        if(exports[id])return exports[id];
        else return (exports = modules[id]());
    }
})(this);

使用示例

define("Hello",function(require,exports,module){
    function sayHello() {
        console.log("hello modules");
    }
    //暴露的接口
    return {
        sayHello : sayHello
    };
});

var Hello = require("Hello");
Hello.sayHello();
實(shí)踐

有了簡易的模塊化管理之后,在項(xiàng)目中,我們就可以采取這樣的結(jié)構(gòu)

-- proj

-- html
    -- index.html
-- css
-- js
    -- common
        -- module1.js(通用模塊1)
        -- module2.js(通用模塊2)
    -- page
        -- index.js(頁面邏輯)
    -- lib
        -- moduler.js 模塊管理庫

配合前端構(gòu)建工具(wepack,grunt,gulp等等),就可以構(gòu)建一個(gè)移動(dòng)端的頁面。

總結(jié)

如今的框架非常地多,而且越做越龐大??蚣芡ǔ?紤]通用性,對(duì)于精益求精的項(xiàng)目來說,可能有時(shí)候也要自己動(dòng)手去實(shí)現(xiàn)一些關(guān)鍵的點(diǎn),而學(xué)習(xí)的來源就是這些牛逼的框架。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/86404.html

相關(guān)文章

  • 詳解Gradle自動(dòng)實(shí)現(xiàn)Android組件化

    摘要:我們一般把自動(dòng)化測(cè)試劃分為三種分別是單元測(cè)試目的是測(cè)試代碼的最小單元。集成測(cè)試用來測(cè)試一個(gè)完成的組件或子系統(tǒng),確保多個(gè)類之間的交互是否按預(yù)期運(yùn)行。集成測(cè)試需要比單元測(cè)試需要更長的執(zhí)行時(shí)間,而且更加難以維護(hù),失敗的原因難以診斷。 前言;為什么我們要用Gradle管理組件呢?先來看看Android組件化需要實(shí)現(xiàn)的目標(biāo)按照業(yè)務(wù)邏輯劃分模塊項(xiàng)目模塊能夠單獨(dú)啟動(dòng)測(cè)試能夠根據(jù)需求引入或刪除某些業(yè)務(wù)模塊通...

    番茄西紅柿 評(píng)論0 收藏0
  • 【計(jì)算機(jī)畢業(yè)設(shè)計(jì)】基于ssm家校通網(wǎng)站系統(tǒng)

    摘要:家校通網(wǎng)站給教育帶來了更廣闊的發(fā)展空間。通知公告信息列表顯示系統(tǒng)的所有通知公告信息,可以通過關(guān)鍵字查詢。通知公告信息刪除對(duì)輸入錯(cuò)誤或過期的通知公告信息刪除。 隨著網(wǎng)...

    EsgynChina 評(píng)論0 收藏0
  • MVPArms官方快速組件化方案開源,來自5K star信賴

    摘要:原文地址前言起源組件化方案分析業(yè)務(wù)組件的劃分和代碼隔離路由框架基礎(chǔ)庫的優(yōu)勢(shì)簡介什么是組件化為什么要組件化分析現(xiàn)有的組件化方案如何選擇組件化方案組件化方案描述架構(gòu)圖一覽架構(gòu)圖詳解宿主層業(yè)務(wù)層業(yè)務(wù)模塊的拆分基礎(chǔ)層核心基礎(chǔ)業(yè)務(wù)公共服務(wù)基礎(chǔ)組件其他 原文地址: https://www.jianshu.com/p/f67... 0 前言 0.1 起源 0.2 組件化方案分析 0.2....

    aikin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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