JavaScript的模块化开发框架Sea.js上手指南


Posted in Javascript onMay 12, 2016

Sea.js所有源码都存放在 GitHub 上:https://github.com/seajs/examples,目录结构为:

examples/
 |-- sea-modules   存放 seajs、jquery 等文件,这也是模块的部署目录
 |-- static      存放各个项目的 js、css 文件
 |   |-- hello
 |   |-- lucky
 |   `-- todo
 `-- app       存放 html 等文件
    |-- hello.html
    |-- lucky.html
    `-- todo.html

引入seajs主文件

<script src="js/sea.js"></script>
<script type="text/javascript">
  // seajs配置项
  seajs.config({
    //设置基本的JS路径(引用外部文件的根目录)
    base:"./js",
    //设置别名(方便后面引用使用)
    alias:{
      "jQuery":"jquery.js"
    },
    //路径配置(跨目录调用或者目录比较深时使用)
    paths: {
      'jQuery': 'http://libs.baidu.com/jquery/2.0.0/'
    },
    //设置文件编码
    charset:"utf-8",
    //预加载文件
    preload:['jQuery']
  });
  // 引用主入口文件
  seajs.use(['main','jQuery'],function(e,$){
    //回调函数
    alert("全部加载完成");
  });
</script>

seajs主入口文件(main)

define(function(require, exports, module) {
  // 主入口文件引入其他文件依赖
  //var testReQ = require('index');
   var testReQ = require.async('index',function(){
      //异步加载回调
      alert("我是异步加载的index的回调函数");
   });
  // 运行index释放的接口方法
  // testReQ.testInit();

  // 运行index释放的接口方法(module)
  testReQ.textFun();
});

seajs依赖文件(index)

define(function(require, exports, module) {
  // 对外释放接口
  exports.testInit = function(){
    alert("我是一个接口");
  };
  // 如果需要释放大量接口,可以使用module
  var testObj = {
    name:"qiangck",
    sex:"man",
    textFun:function(){
      alert("我是一个使用module.exports的对象方法");
    }
  }
  // module.exports接收obj对象
  module.exports = testObj;
});

文件的加载顺序

JavaScript的模块化开发框架Sea.js上手指南

下面我们从 hello.html 入手,来瞧瞧使用 Sea.js 如何组织代码。

在页面中加载模块

在 hello.html 页尾,通过 script 引入 sea.js 后,有一段配置代码:

// seajs 的简单配置
seajs.config({
 base: "../sea-modules/",
 alias: {
  "jquery": "jquery/jquery/1.10.1/jquery.js"
 }
})

// 加载入口模块
seajs.use("../static/hello/src/main")

sea.js 在下载完成后,会自动加载入口模块。页面中的代码就这么简单。

模块代码

这个小游戏有两个模块 spinning.js 和 main.js,遵循统一的写法:

// 所有模块都通过 define 来定义
define(function(require, exports, module) {

 // 通过 require 引入依赖
 var $ = require('jquery');
 var Spinning = require('./spinning');

 // 通过 exports 对外提供接口
 exports.doSomething = ...

 // 或者通过 module.exports 提供整个接口
 module.exports = ...

});

上面就是 Sea.js 推荐的 CMD 模块书写格式。如果你有使用过 Node.js,一切都很自然。

Javascript 相关文章推荐
JS获取dom 对象 ajax操作 读写cookie函数
Nov 18 Javascript
Jquery响应回车键直接提交表单操作代码
Jul 25 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
JavaScript实现强制重定向至HTTPS页面
Jun 10 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
Mar 30 Javascript
js动态生成Html元素实现Post操作(createElement)
Sep 14 Javascript
通过设置CSS中的position属性来固定层的位置
Dec 14 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
vue中锚点的三种方法
Jul 06 Javascript
vue this.reload 方法 配置
Sep 12 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 18 Javascript
JavaScript arguments.callee作用及替换方案详解
Sep 02 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 #Javascript
jQuery CSS3自定义美化Checkbox实现代码
May 12 #Javascript
深入浅析JavaScript中with语句的理解
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 #Javascript
You might like
Mysql的常用命令
2006/10/09 PHP
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php中apc缓存使用示例
2013/12/25 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
php输出形式实例整理
2020/05/05 PHP
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
python中xrange用法分析
2015/04/15 Python
Python素数检测实例分析
2015/06/15 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
python机器学习实战之K均值聚类
2017/12/20 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
对Django外键关系的描述
2019/07/26 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
会计主管岗位职责范文
2013/11/08 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
暑假学习心得体会
2014/09/02 职场文书
小学少先队活动总结
2015/05/08 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
Nginx安装配置详解
2022/06/25 Servers