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 获得选中文本内容的方法
Feb 15 Javascript
Javascript图像处理—亮度对比度应用案例
Jan 03 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
Backbone.js的Hello World程序实例
Jun 19 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
Oct 26 Javascript
基于vue2.x的电商图片放大镜插件的使用
Jan 22 Javascript
Vue用v-for给src属性赋值的方法
Mar 03 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
Sep 16 Javascript
react实现移动端下拉菜单的示例代码
Jan 16 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
使用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调用数据库的存贮过程
2006/10/09 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
jquery uaMatch源代码
2011/02/14 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
使用python实现接口的方法
2017/07/07 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Django实现表单验证
2018/09/08 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
利用Python检测URL状态
2019/07/31 Python
Python threading的使用方法解析
2019/08/28 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Python远程linux执行命令实现
2020/11/11 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
新员工入职感言
2014/02/01 职场文书
学生会离职感言
2014/02/11 职场文书
中学生运动会入场词
2014/02/12 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
婚宴主持词
2015/06/30 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript