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 相关文章推荐
理解Javascript_11_constructor实现原理
Oct 18 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
去掉gridPanel表头全选框的小例子
Jul 18 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
JavaScript数组随机排列实现随机洗牌功能
Mar 19 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
js实现鼠标移动到图片产生遮罩效果
Oct 21 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
vue-cli安装使用流程步骤详解
Nov 08 Javascript
微信小程序实现页面浮动导航
Jan 28 Javascript
JavaScript RegExp 对象用法详解
Sep 24 Javascript
【js设计模式】SOLID五大设计原则
Mar 24 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
p5.js实现简单货车运动动画
2019/10/23 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
python实现按日期归档文件
2021/01/30 Python
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
社区党建工作方案
2014/06/10 职场文书
医学生求职自荐书
2014/06/12 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
公司感谢信范文
2015/01/22 职场文书
公路施工安全责任书
2015/05/08 职场文书
2015中学学校工作总结
2015/07/20 职场文书
2016年母亲节寄语
2015/12/04 职场文书
python内置进制转换函数的操作
2021/06/02 Python
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python