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 相关文章推荐
JS宝典学习笔记(下)
Jan 10 Javascript
屏蔽Flash右键信息的js代码
Jan 17 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
Javascript中的Prototype到底是什么
Feb 16 Javascript
jQuery.datatables.js插件用法及api实例详解
Oct 28 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
jQuery实现的点击按钮改变样式功能示例
Jul 21 jQuery
Vue内部渲染视图的方法
Sep 02 Javascript
layui字体图标 loading图标静止不旋转的解决方法
Sep 23 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&&mysql)六
2006/10/09 PHP
我的论坛源代码(十)
2006/10/09 PHP
linux php mysql数据库备份实现代码
2009/03/10 PHP
浅谈php处理后端&接口访问超时的解决方法
2016/10/29 PHP
document.all与WEB标准
2020/05/13 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
nodejs更改项目端口号的方法
2018/05/13 NodeJs
详解Axios统一错误处理与后置
2018/09/26 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
Django内容增加富文本功能的实例
2017/10/17 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
Python求离散序列导数的示例
2019/07/10 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python实现微信机器人的方法
2019/09/06 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
幼儿园教师自我鉴定
2014/03/20 职场文书
施工安全标语
2014/06/07 职场文书
农业项目建议书
2014/08/25 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
详解MySQL的半同步
2021/04/22 MySQL
详解SQL的窗口函数
2022/04/21 Oracle