摘要:模塊管理的簡單實現方式,為什么會有這個東西方便組織你的代碼,提高項目的可維護性。適用場景移動端頁面,將注入到頁面,這樣就不用考慮模塊加載的問題,從而節省了很多的代碼,在實現上也更為的簡單。
模塊管理的簡單實現方式
Keep It Simple,Stupid
Q&A1. 為什么會有這個東西?
方便組織你的代碼,提高項目的可維護性。一個項目的可維護性高不高,也體現一個程序員的水平,在如今越來越復雜的前端項目,這一點尤為重要。
2. 為什么不用requirejs,seajs等
它們功能強大,但是文件體積是個問題,此外還有就是業務有時候可能沒那么復雜,正如開頭所說的:keep it simple
3. 以下的實現從哪里來的?
這些借鑒了requirejs,seajs,commonjs等的實現,用于真實的項目,穩定運行,效果不錯。
4. 適用場景
移動端頁面,將js注入到html頁面,這樣就不用考慮模塊加載的問題,從而節省了很多的代碼,在實現上也更為的簡單。
如果是多文件加載的話,需要手動執行文件加載順序,那么其實最好用庫來進行依賴管理會好一點。
實現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();實現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(); }); });實現3
另外一種風格的模塊管理
(function(global) { var exports = {}; //存儲模塊暴露的接口 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();實踐
有了簡易的模塊化管理之后,在項目中,我們就可以采取這樣的結構
-- proj
-- html -- index.html -- css -- js -- common -- module1.js(通用模塊1) -- module2.js(通用模塊2) -- page -- index.js(頁面邏輯) -- lib -- moduler.js 模塊管理庫
配合前端構建工具(wepack,grunt,gulp等等),就可以構建一個移動端的頁面。
總結如今的框架非常地多,而且越做越龐大。框架通常考慮通用性,對于精益求精的項目來說,可能有時候也要自己動手去實現一些關鍵的點,而學習的來源就是這些牛逼的框架。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86404.html
摘要:我們一般把自動化測試劃分為三種分別是單元測試目的是測試代碼的最小單元。集成測試用來測試一個完成的組件或子系統,確保多個類之間的交互是否按預期運行。集成測試需要比單元測試需要更長的執行時間,而且更加難以維護,失敗的原因難以診斷。 前言;為什么我們要用Gradle管理組件呢?先來看看Android組件化需要實現的目標按照業務邏輯劃分模塊項目模塊能夠單獨啟動測試能夠根據需求引入或刪除某些業務模塊通...
摘要:家校通網站給教育帶來了更廣闊的發展空間。通知公告信息列表顯示系統的所有通知公告信息,可以通過關鍵字查詢。通知公告信息刪除對輸入錯誤或過期的通知公告信息刪除。 隨著網...
摘要:原文地址前言起源組件化方案分析業務組件的劃分和代碼隔離路由框架基礎庫的優勢簡介什么是組件化為什么要組件化分析現有的組件化方案如何選擇組件化方案組件化方案描述架構圖一覽架構圖詳解宿主層業務層業務模塊的拆分基礎層核心基礎業務公共服務基礎組件其他 原文地址: https://www.jianshu.com/p/f67... 0 前言 0.1 起源 0.2 組件化方案分析 0.2....
閱讀 2752·2021-11-16 11:45
閱讀 1660·2021-09-26 10:19
閱讀 2055·2021-09-13 10:28
閱讀 2809·2021-09-08 10:46
閱讀 1537·2021-09-07 10:13
閱讀 1533·2019-08-30 13:50
閱讀 1378·2019-08-30 11:17
閱讀 1460·2019-08-29 13:18