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+css实现图片滚动效果(附源码)
Mar 18 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
jQuery 计算iframe 窗口大小的方法
May 13 Javascript
Jquery使用val方法读写value值
May 18 Javascript
Node.js操作Firebird数据库教程
Mar 04 Javascript
vue 添加vux的代码讲解
Nov 30 Javascript
node实现基于token的身份验证
Apr 09 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
vue路由教程之静态路由
Sep 03 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
Dec 06 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
Nov 23 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
德生PL330测评
2021/03/02 无线电
php auth_http类库进行身份效验
2009/03/19 PHP
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
PHP 替换模板变量实现步骤
2009/08/24 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
Python入门篇之对象类型
2014/10/17 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
网站创业计划书
2014/04/30 职场文书
文案策划专业自荐信
2014/07/07 职场文书
授权委托书(完整版)
2014/09/10 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
python之基数排序的实现
2021/07/26 Python
利用Python多线程实现图片下载器
2022/03/25 Python
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL