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 Onunload与Onbeforeunload使用小结
Dec 31 Javascript
jquery+json实现数据二级联动的方法
Nov 28 Javascript
数据结构中的各种排序方法小结(JS实现)
Jul 23 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
Jul 19 Javascript
提高Node.js性能的应用技巧分享
Aug 10 Javascript
在微信小程序中渲染HTML内容的方法示例
Sep 28 Javascript
node-red File读取好保存实例讲解
Sep 11 Javascript
layer提示框添加多个按钮选择的实例
Sep 12 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
Mar 02 Javascript
写一个Vue loading 插件
Nov 09 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 27 Javascript
JavaScript实现手风琴效果
Feb 18 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&amp;MYSQL留言板源码
2020/07/19 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
Puppet的一些技巧
2018/09/17 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
python add_argument()用法解析
2020/01/29 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
C语言变量的命名规则都有哪些
2013/12/27 面试题
Sql面试题
2013/03/20 面试题
巴西世界杯32强口号
2014/06/05 职场文书
房产遗嘱范本
2015/08/06 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL