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 相关文章推荐
DOM相关内容速查手册
Feb 07 Javascript
jquery animate 动画效果使用说明
Nov 04 Javascript
Javascript学习指南
Dec 01 Javascript
使用Jquery实现每日签到功能
Apr 03 Javascript
分享javascript实现的冒泡排序代码并优化
Jun 05 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
Aug 01 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
angular.JS实现网页禁用调试、复制和剪切
Mar 31 Javascript
ES6新增的math,Number方法
Aug 06 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
vue基于better-scroll实现左右联动滑动页面
Jun 30 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
php实现文件下载更能介绍
2012/11/23 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
javascript void(0)的妙用
2009/10/21 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
JS常见算法详解
2017/02/28 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
Python易忽视知识点小结
2015/05/25 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
Python中修改字符串的四种方法
2018/11/02 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
python装饰器代码深入讲解
2021/03/01 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
深圳茁壮笔试题
2015/05/28 面试题
中学生秋季运动会广播稿
2014/09/21 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
先进工作者申报材料
2014/12/23 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python