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 相关文章推荐
原生javascript实现Tab选项卡切换功能
Jan 12 Javascript
JavaScript插件化开发教程(五)
Feb 01 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
Dec 25 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
对Angular.js Controller如何进行单元测试
Oct 25 Javascript
jQuery实现 上升、下降、删除、添加一行代码
Mar 06 Javascript
关于Vue.nextTick()的正确使用方法浅析
Aug 25 Javascript
浅析node应用的timing-attack安全漏洞
Feb 28 Javascript
解决vue-cli创建项目的loader问题
Mar 13 Javascript
Angularjs实现控制器之间通信方式实例总结
Mar 27 Javascript
keep-alive保持组件状态的方法
Dec 02 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
《PHP边学边教》(01.开篇――准备工作)
2006/12/13 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
php封装的page分页类完整实例
2016/10/18 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
一步步教你用Python实现2048小游戏
2017/01/19 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
浅谈Python 参数与变量
2020/06/20 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
阿尔卡特(中国)的面试题目
2014/08/20 面试题
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
毕业生动漫设计求职信
2013/10/11 职场文书
化学教师自荐信范文
2013/12/28 职场文书
大学毕业感言50字
2014/02/07 职场文书
汽车促销活动方案
2014/03/31 职场文书
商务日语专业自荐信
2014/04/17 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
技术入股协议书
2016/03/22 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
使用golang编写一个并发工作队列
2021/05/08 Golang
Python数据处理的三个实用技巧分享
2022/04/01 Python
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL