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 相关文章推荐
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
prettify 代码高亮着色器google出品
Dec 28 Javascript
jQuery 版元素拖拽原型代码
Apr 25 Javascript
关于火狐(firefox)及ie下event获取的两种方法
Dec 27 Javascript
浅谈jquery中delegate()与live()
Jun 22 Javascript
js实现文字滚动效果
Mar 03 Javascript
深入理解JS实现快速排序和去重
Oct 17 Javascript
Node.JS文件系统解析实例详解
May 15 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
AngularJS实现注册表单验证功能
Oct 16 Javascript
AngularJS 教程及实例代码
Oct 23 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 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
长波有什么东西
2021/03/01 无线电
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
python实现封装得到virustotal扫描结果
2014/10/05 Python
python函数的5种参数详解
2017/02/24 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
Django xadmin安装及使用详解
2020/10/26 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
J2EE面试题集锦(附答案)
2013/08/16 面试题
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
护理专业学生职业生涯规划范文
2014/03/11 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
团队拓展活动方案
2014/08/28 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
国庆节主题班会
2015/08/15 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
图文详解Nginx版本平滑升级方案
2021/09/15 Servers