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 相关文章推荐
基于jquery的给文章加入关键字链接
Oct 26 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
Dec 25 Javascript
js实现checkbox全选和反选示例
May 01 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
Nov 30 Javascript
javascript仿百度输入框提示自动下拉补全
Jan 07 Javascript
基于jquery实现简单的分页控件
Mar 17 Javascript
原生JS和jQuery版实现文件上传功能
Apr 18 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
Jun 25 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 Javascript
JavaScript实现下拉列表
Jan 20 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
phpinfo 系统查看参数函数代码
2009/06/05 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
Node.js复制文件的方法示例
2016/12/29 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
传媒专业推荐信范文
2013/11/23 职场文书
中专生自我鉴定范文
2013/12/19 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
物流管理专业自荐信
2014/06/23 职场文书
国际贸易实训报告
2014/11/05 职场文书
公司门卫岗位职责
2015/04/13 职场文书
初婚初育证明范本
2015/06/18 职场文书
初三英语教学反思
2016/02/15 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python