seaJS 简要介绍和完整例子

2023-12-02 06:58

本文主要是介绍seaJS 简要介绍和完整例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从事前端开发工作的大概都有所耳闻 requireJS 这个框架,除了这个外还有一个相似的就是 seaJS,以前都是使用而已没时间写一些记录,今天有空就写一下,顺便写个例子;


什么是 seaJS ?
和requireJS相似的,seaJS 是用JavaScript编写的JS框架,主要功能是可以按不同的先后依赖关系对 JavaScript 等文件的进行加载工作,可简单理解为JS文件的加载器,它非常适合在浏览器中使用,它可以确保所依赖的JS文件加载完成之后再加载当前的JS文件,这在大量使用JS文件的项目中可确保各个JS文件的先后加载顺序,确保避免了以前因某些原因某个文件加载慢而导致其它加载快的文件需要依赖其某些功能而出现某函数或某变量找不到的问题,这点非常有用,也是 seaJS (遵守CMD) 的主要价值所在吧;但和 requireJS (遵守AMD规范)有所区别吧,具体网上自己搜一下...


seaJS 官网 http://seajs.org 它是一个开源项目,目前由阿里、腾讯等公司共同维护。 更多详细的请到官网了解,下面是快速简要了解的知识点。


快速简要知识点:

1, seajs.config({...});   //用来对 Sea.js 进行配置。
2, seajs.use(['a','b'],function(a,b){...});   //用来在页面中加载一个或多个模块。
3, define(function(require, exports, module){...});   //用来定义模块。Sea.js 推崇一个模块一个文件,遵循统一的写法:
4, require(function(require){var a = require("xModule"); ... });   //require 用来获取指定模块的接口。
5, require.async,  //用来在模块内部异步加载一个或多个模块。 例如:
define(function(require){require.async(['aModule','bModule'],function(a,b){  // 异步加载多个模块,在加载完成时,执行回调a.func();b.func();})    
});
6, exports, //用来在模块内部对外提供接口。 例如:
define(function(require, exports){exports.varName01 = 'varValue';  // 对外提供 varName01 属性    exports.funName01 = function(p1,p2){  // 对外提供 funName01 方法....}       
});
7, module.exports, 与 exports 类似,用来在模块内部对外提供接口。例如:
define(function(require, exports, module) {  module.exports = {  // 对外提供接口name: 'a',doSomething: function() {...};};
});
以上 7 个接口是最常用的,要牢记于心。


好了,简要介绍就到这。

下面看一个实际例子
这个例子的设计要求是 hellowMain.js 文件依赖 hellow.js, jQuery作为备用加载到项目中,只有等依赖文件加载完了,才进行业务的JS代码初始化工作;
1,首先看例子文件目录结构:

//file of folder structure
//-----------------------------------------------------
//seaJS对项目的目录一般格式如下,如userExample01下的结构
userExample01|-----sea-modules|           |--sea.js 等框架JS文件|-----app|      |----*.html 页面html文件|-----static|        |---hellow|              |---*.js/*.css
//-----------------------------------------------------

2,HTML 文件 index.html 注意看 seaJS 加载方式之一,见 script 标签,以及配置和调用方式;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>seaJS</title>
<link rel="stylesheet" href="../static/hellow/hellow.css" />
</head>
<body>
<h4>seaJS 例子 example 01</h4>
<div id="div01" class="div01">
<span id="span01" class="span01">my TEXT 001 seaJS 例子,鼠标移动到上面看看边框变化...</span>
</div>
<br>
<div id="div02" class="div02">my TEXT 002 seaJS 例子,鼠标放到上面等下看</div>
<script type="text/javascript" src="../sea-modules/sea.js"></script>
<script type="text/javascript">
// seajs 的简单配置
seajs.config({//all alias path base on this//所有别名基于本路径base:"../sea-modules/"//define each self path//定义paths,本例未启用//,paths:{//	"jQueryPath":"jquery"//}//define each alias name here,alias:{ //auto add suffix .js"jQuery1.9":"jquery/jquery-1.9.1.min","jQuery1.11":"jquery/jquery-1.11.0.min","hellow":"../hellow/hellow"},preload:'jQuery1.11',vars:{'locale':'zh-cn' //本例未启用,在模块中可用格式{key},即{locale}表示变量}
});
//加载入口模块,加载完成后调用模块的方法
seajs.use(['jQuery1.11','../static/hellow/hellowMain.js'],function($,hm){hm.initEvent();	
});
//seajs.use(['jQuery1.11','../static/hellow/hellowMain.js']);
</script>
</body>
</html>
3,页面样式文件 hellow.css 
@charset "utf-8";
*{font-family:"微软雅黑","microsoft Yahei",verdana;}
pre{margin:0px;padding:2px 0px;font-size:13px;font-family:verdana;}.div01{border:1px solid red;width:600px;min-height:100px;padding:10px;box-sizing:border-box;
}.span01{border:1px solid blue;display:inline-block;	
}.div02{border:1px dotted #666;min-height:60px;font-size:20px;margin:20px 0px 0px 0px;
}.alignRight{text-align:right;font-size:30px;animation:myplay01 2s linear 2s infinite normal;
}@keyframes myplay01 {0% {background: white; transform: rotate(0deg);transform:translate(0,0);}	100% {background: #CCC; transform: rotate(30deg);transform:translate(0px,100px)}
}.text01{line-height:20px;font-size:13px;font-family:verdana;
}

4,业务文件之一,hellow.js  注意语法看看模块是怎么写的,推荐注意文件各个注释说明和书写格式,方便养成良好习惯和代码规范

define(function(require, exports, module){//1,define intenal variable area//变量定义区var moduleName = "hellow module";var version = "1.0.0";//2,define intenal funciton area//函数定义区var getObj = function(id){return document.getElementById(id+"");		};exports.alert = function(a){alert(a);	};exports.initEvent = function(){var myObj = getObj('div01');myObj.onmouseover = function(){myObj.style = "border:3px solid blue;"};myObj.onmouseout = function(){myObj.style = "border:1px solid red;"};var myObj2 = getObj('div02');myObj2.onmouseover = function(){myObj2.className = "div02 alignRight";};myObj2.onmouseout = function(){myObj2.className = "div02";};		};//3,export this module API for outside other module//暴露本模块API给外部其它模块使用module.exports = exports;//4,auto run initEvent function when module loaded finish//启用时在加载完将自动运行某方法//exports.initEvent();});

4,业务文件之一,主模块 hellowMain.js
 注意语法看看模块是怎么写的,推荐注意文件各个注释说明和书写格式,方便养成良好习惯和代码规范

// This is app main module JS file
define(function(require, exports, module){//1,define intenal variable area//变量定义区var moduleName = "hellow module";var version = "1.0.0";//2,load each dependency var workjs = require("hellow");//3,define intenal funciton area//函数定义区exports.loadTip = function(refConId){var tipMsg = "module is loaded finish.";if(undefined === refConId || null === refConId || "" === refConId+""){alert(tipMsg);}else{document.getElementById(refConId+"").innerHTML = tipMsg;}};exports.initEvent = function(){		workjs.initEvent();exports.loadTip();};//4,export this module API for outside other module//暴露本模块API给外部其它模块使用module.exports = exports;//5,auto run initEvent function when module loaded finish//启用时在加载完将自动运行某方法//exports.initEvent();});

注意,对应的 seaJS 和 jquery 各个版本文件这里没有给出,到对应的网上或官网下载放到对应目录,注意修改文件名对应即可,参见对应地方的注释;

好了,例子介绍到这就完了,还算简单吧? 呵呵,我把这个例子完整打包上传到我的空间,欢迎点击这里下载,拍砖讨论...

值得注意的是本例虽然简单,但是基本包含了实际大部分 seaJS 知识点,注释也非常清楚,同时注意文件的组织结构,seaJS的配置的定义,调用关系,模块的写法,模块内部的写法,依赖文件的加载和调用,以及模块如何自动运行某个函数等等。夜了参考上面的写法,准备觉觉,可能部分有疏漏,,拍砖讨论...


这篇关于seaJS 简要介绍和完整例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/444378

相关文章

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

macOS彻底卸载Python的超完整指南(推荐!)

《macOS彻底卸载Python的超完整指南(推荐!)》随着python解释器的不断更新升级和项目开发需要,有时候会需要升级或者降级系统中的python的版本,系统中留存的Pytho版本如果没有卸载干... 目录MACOS 彻底卸载 python 的完整指南重要警告卸载前检查卸载方法(按安装方式)1. 卸载

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT