seajs

全部源码都存放在 GitHub 上:seajs/examples,目录结构为:css

examples/
  |-- sea-modules      存放 seajs、jquery 等文件,这也是模块的部署目录
  |-- static           存放各个项目的 js、css 文件
  |     |-- hello
  |     |-- lucky
  |     `-- todo
  `-- app              存放 html 等文件
        |-- hello.html
        |-- lucky.html
        `-- todo.html

spm(static package manager)致力于提供一个开放、通用、完善、集成化的基于浏览器模块生命周期的包管理工具,包括初始化、编码、本地化调试、文档生成、发布、依赖管理、单元测试、构建、源服务等等功能。html

dist      -- sea.js 等压缩好的文件,直接可用
docs      -- 使用文档
lib       -- 给 Node.js 用的版本
src       -- 源码
tests     -- 测试集
Makefile  -- 可执行构建、测试等命令

推荐使用 spm 安装:jquery

$ npm install spm -g
$ spm install seajs

seajs.config

用来对 Sea.js 进行配置。git

seajs.config({

  // 设置路径,方便跨目录调用
  paths: {
    'arale': 'https://a.alipayobjects.com/arale',
    'jquery': 'https://a.alipayobjects.com/jquery'
  },

  // 设置别名,方便调用
  alias: {
    'class': 'arale/class/1.0.0/class',
    'jquery': 'jquery/jquery/1.10.1/jquery'
  }

});

更多配置项请参考:#262github

seajs.use

用来在页面中加载一个或多个模块。npm

// 加载一个模块
seajs.use('./a');

// 加载一个模块,在加载完成时,执行回调
seajs.use('./a', function(a) {
  a.doSomething();
});

// 加载多个模块,在加载完成时,执行回调
seajs.use(['./a', './b'], function(a, b) {
  a.doSomething();
  b.doSomething();
});

更多用法请参考:#260浏览器

define

用来定义模块。Sea.js 推崇一个模块一个文件,遵循统一的写法:app

define(function(require, exports, module) {

  // 模块代码

});

也能够手动指定模块 id 和依赖,详情请参考:#242
requireexports 和 module 三个参数可酌情省略,具体用法以下。异步

require

require 用来获取指定模块的接口。async

define(function(require) {

  // 获取模块 a 的接口
  var a = require('./a');

  // 调用模块 a 的方法
  a.doSomething();
});

注意,require 只接受字符串直接量做为参数,详细约定请阅读:#259

require.async

用来在模块内部异步加载一个或多个模块。

define(function(require) {

  // 异步加载一个模块,在加载完成时,执行回调
  require.async('./b', function(b) {
    b.doSomething();
  });

  // 异步加载多个模块,在加载完成时,执行回调
  require.async(['./c', './d'], function(c, d) {
    c.doSomething();
    d.doSomething();
  });

});

详细说明请参考:#242

exports

用来在模块内部对外提供接口。

define(function(require, exports) {

  // 对外提供 foo 属性
  exports.foo = 'bar';

  // 对外提供 doSomething 方法
  exports.doSomething = function() {};

});

详细说明请参考:#242

module.exports

与 exports 相似,用来在模块内部对外提供接口。

define(function(require, exports, module) {

  // 对外提供接口
  module.exports = {
    name: 'a',
    doSomething: function() {};
  };

});

module.exports 与 exports 的区别,以及详细说明请参考:#242

相关文章
相关标签/搜索