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的Function详细
Nov 14 Javascript
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
Aug 13 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
May 04 Javascript
jQuery页面加载初始化的3种方法(推荐)
Jun 02 Javascript
Bootstrap前端开发案例二
Jun 17 Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
vue+element实现打印页面功能
May 20 Javascript
angularjs请求数据的方法示例
Aug 06 Javascript
手写Spirit防抖函数underscore和节流函数lodash
Mar 22 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使用类继承解决代码重复的问题
2015/02/11 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
Python中bisect的用法
2014/09/23 Python
Python多线程爬虫简单示例
2016/03/04 Python
详解python eval函数的妙用
2017/11/16 Python
Python实现直播推流效果
2019/11/26 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
2015年复活节活动总结
2015/02/27 职场文书
廉政承诺书范文
2015/04/28 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
信息技术国培研修日志
2015/11/13 职场文书
《青山不老》教学反思
2016/02/22 职场文书
python 逐步回归算法
2021/04/06 Python