一个极为简单的requirejs实现方法
2019/6/27 21:42:06
本文主要是介绍一个极为简单的requirejs实现方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
require和 sea的源码分析,我之前的博客有写过, 今天我想分享的是一个很简单的核心代码(不带注释和空行大概60行), 没有容错判断。
require.js
require函数实现用一句话概括:
依次加载require的模块,然后监测script的onload事件,判断所有模块加载成功,执行require的callback, 如果只带一个参数且不是数组,就是加载成功后return 模块。
//标记已经加载成功的个数 var REQ_TOTAL = 0; //模块导出 window.exports = {}; //记录各个模块的顺序 var exp_arr = []; //判断是否数组 function isArray(param) { return param instanceof Array; } //require 真正实现 function require(arr, callback) { var req_list; if(isArray(arr)) { req_list = arr; } else { req_list = [arr]; } var req_len = req_list.length; //模块逐个加载 for(var i=0;i<req_len;i++) { var req_item = req_list[i]; var $script = createScript(req_item, i); var $node = document.querySelector('head'); (function($script) { //检测script 的onload事件 $script.onload = function() { REQ_TOTAL++; var script_index = $script.getAttribute('index'); exp_arr[script_index] = exports; window.exports = {}; //所有链接加载成功后,执行callback if(REQ_TOTAL == req_len) { callback && callback.apply(exports, exp_arr); } } $node.appendChild($script); })($script); } } //创建一个script标签 function createScript(src, index) { var $script = document.createElement('script'); $script.setAttribute('src', src); $script.setAttribute('index', index); return $script; }
然后写了2个导出模块的js文件, 只写了最简单的exports实现
define.js
exports.define = { topic: 'my export', desc: 'this is other way to define ', sayHello: function() { console.log('topic ' + this.topic + this.desc); } }
define2.js
exports.define = { name: 'xm', age: 22, info: function() { console.log('topic ' + this.name + this.age); } }
然后测试demo很简单
//测试demo require(['../res/define.js', '../res/define2.js'], function(def, def2) { def.define.sayHello(); def2.define.info(); });
以上就是小编为大家带来的一个极为简单的requirejs实现方法全部内容了,希望大家多多支持找一找教程网~
这篇关于一个极为简单的requirejs实现方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-31Vue CLI多环境配置学习入门
- 2024-12-31Vue CLI学习入门:一步一步搭建你的第一个Vue项目
- 2024-12-31Vue3公共组件学习入门:从零开始搭建实用组件库
- 2024-12-31Vue3公共组件学习入门教程
- 2024-12-31Vue3学习入门:新手必读教程
- 2024-12-31Vue3学习入门:初学者必备指南
- 2024-12-30Vue CLI多环境配置教程:轻松入门指南
- 2024-12-30Vue CLI 多环境配置教程:从入门到实践
- 2024-12-30初学者的vue CLI教程:快速开始你的Vue项目
- 2024-12-30Vue CLI教程:新手入门指南