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拓展String方法小结
Jul 08 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
Oct 29 Javascript
jQuery实现“扫码阅读”功能
Jan 21 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
JS库 Highlightjs 添加代码行号的实现代码
Sep 13 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
Jun 11 Javascript
原生JS实现简单的倒计时功能示例
Aug 30 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
回顾Javascript React基础
Jun 15 Javascript
封装微信小程序http拦截器过程解析
Aug 13 Javascript
微信小程序自定义弹出层效果
May 26 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编程开发“虚拟域名”系统
2006/10/09 PHP
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
javascript第一课
2007/02/27 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
网上开商店的创业计划书
2014/01/19 职场文书
街道务虚会发言材料
2014/10/20 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android