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去除空格的几种方法
Oct 03 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
jQuery窗口、文档、网页各种高度的精确理解
Jul 02 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
学习Node.js模块机制
Oct 17 Javascript
jQuery的extend方法【三种】
Dec 14 Javascript
Jquery Easyui日历组件Calender使用详解(23)
Dec 18 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
JavaScript事件委托原理与用法实例分析
Jun 07 Javascript
layui添加动态菜单与选项卡
Jul 26 Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 01 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图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
简单解析Django框架中的表单验证
2015/07/17 Python
Python pass详细介绍及实例代码
2016/11/24 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
Python实现线程状态监测简单示例
2018/03/28 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
django创建超级用户过程解析
2019/09/18 Python
flask实现验证码并验证功能
2019/12/05 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
自我鉴定书面格式
2014/01/13 职场文书
施工安全责任书
2014/04/14 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
2014年班级工作总结
2014/11/14 职场文书
毕业生学校组织意见
2015/06/04 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle