js模块加载方式浅析


Posted in Javascript onAugust 12, 2017

简介: 前端模块化开发日渐鼎盛,如何将零散的插件或者是普通的js脚本文件统一管理及引用,是众多开发者共同的目标。本人是从事.net开发的,最近对前端的一些东西特别的感兴趣,也会尝试的夹杂一点自己的想法,写一些小东西。东西不牛逼,但是感觉用起来还是方便那么一点的。

下面就展示一下简短的小代码。

中心思想:通过外部调用事先封装好的模块加载方法,传入参数(包括主目录及模块js或者css的目录 ),在程序运行的同时,会动态的将相应的css或者是js代码追加引用到head标签内,这样,就可以使用被引用的文件的样式或者方法啦。

源文件:

(function(req) {
  window._Req= req;
})((function($) {
  var _factory = function() {}; //模块工厂
  //docker
  _factory.prototype = {
    _origin: location.origin || location.protocol + "//" + location.host,//域名地址
    _aim: null,
    _config: function(param) {
      var _default = { //默认参数
          _coreDir: "",
          _moduleArr: [
            ['', '']
          ], //模块数组
        },
        _opt = {};
      $.extend(_opt, _default);
      if (typeof param === 'object')
        $.extend(_opt, param);
      this._aim = _opt;
      this._load();  //加载模块
    },
    _load: function() {
      try {
        var _modules = this._aim._moduleArr,
          _core = this._aim._coreDir;
        _modules.forEach(function(_element) {
          _element.forEach(function(_ele) {
            var _index = _ele.lastIndexOf('.'), 
              _moduleType = _ele.substring(_index + 1), 
              _moduleDir = _core + '/' + _ele, 
              _module = null;
            switch (_moduleType) {
              case 'js':
                _module = document.createElement('script');
                _module.src = _moduleDir;
                break;
              case 'css':
                _module = document.createElement('link');
                _module.href = _moduleDir;
                _module.rel = 'stylesheet';
                break;
              default:
                console.error("对不起模块类型不匹配");
                break;
            }
            document.head.appendChild(_module); 
          });
        }, this);
      } catch (ex) {
        throw ex;
      }
    }
  };
  return new _factory(); //返回工厂
})(jQuery))

调用:

_Req._config({
    _coreDir: "../jq-package",
          _moduleArr: [
            ['js/ui-dialog.js', 'css/dialog.css']
          ], //模块数组
 });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
5款Javascript颜色选择器
Oct 25 Javascript
Jquery给基本控件的取值、赋值示例
May 23 Javascript
JavaScript结合AJAX_stream实现流式显示
Jan 08 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
Feb 15 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
详解vue中组件参数
Jul 09 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
Mar 14 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
Sep 26 Javascript
JavaScript计算出两个数的差值
Mar 19 Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 Javascript
详解阿里Node.js技术文档之process模块学习指南
Jan 04 Javascript
浅谈angular2 组件的生命周期钩子
Aug 12 #Javascript
Node.js pipe实现源码解析
Aug 12 #Javascript
vue实现移动端图片裁剪上传功能
Aug 18 #Javascript
JavaScript实现图片切换效果
Aug 12 #Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 #Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 #Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 #Javascript
You might like
WordPress分页伪静态加html后缀
2016/06/08 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
React中的refs的使用教程
2018/02/13 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
什么是类的返射机制
2016/02/06 面试题
GWT的应用有哪两种部署模式
2012/12/21 面试题
邮政员工辞职信
2014/01/16 职场文书
爱牙日活动总结
2014/08/29 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
老公出轨后的保证书
2015/05/08 职场文书