sea.js说明文档
Sea.js 手册与文档
模块定义
在 SeaJS 中,所有 JavaScript 文件都应该用模块的形式来书写,并且一个文件只包含一个模块。
define
使用全局函数 define 来定义模块:
define(id?, dependencies?, factory);
id
当前模块的唯一标识。该参数可选。如果没有指定,默认为模块所在文件的访问路径。如果指定的话, 必须是顶级或绝对标识(不能是相对标识)。
dependencies
当前模块所依赖的模块,是一个由模块标识组成的数组。该参数可选。如果没有指定,模块加载器会从factory.toString() 中解析出该数组。
** 注意:强烈推荐不要设定 id 和 dependencies 参数。 在开发阶段,模块加载器会自动获取这两个参数。部署上线时,则可以通过优化工具来提取这两个参数。
factory
模块的工厂函数。模块初始化时,会调用且仅调用一次该工厂函数。factory 可以是函数, 也可以是对象、字符串等任意值,这时 module.exports 会直接设置为 factory 值。
factory 函数在调用时,会始终传入三个参数: require、exports 和 module, 这三个参数在所有模块代码里可用。
define(function(require, exports, module) {
// The module code goes here
});
exports
exports 用来向外提供模块的 API.
define(function(require, exports) {
// snip...
exports.foo = 'bar';
exports.doSomething = function() {};
});
除了给 exports 对象增加成员,还可以使用 return 直接向外提供 API.
define(function(require, exports) {
// snip...
return {
foo: 'bar',
doSomething: function() {};
};
});
如果 return 语句是模块中的唯一代码,可简化为:
define({
foo: 'bar',
doSomething: function() {};
});
上面这种格式特别适合定义 JSON 数据。
** 注意:下面这种写法是错误的!
define(function(require, exports) {
// snip...
exports = { // 错误!
foo: 'bar',
doSomething: function() {};
};
});
模块加载器不能获取到新赋给 exports 变量的值。 请使用 return 或 module.exports 。
require
require 函数用来访问其他模块提供的 API.
define(function(require) {
var a = require('./a');
a.doSomething();
});
它接受 模块标识 作为唯一参数。
请牢记,为了使静态分析能成功获取到模块依赖信息,在书写模块时,需要遵循一些简单的 规则。
require.async
该方法可用来异步加载模块,并在加载完成后执行回调函数。
define(function(require, exports, module) {
// 加载一个模块
require.async('./b', function(b) {
b.doSomething();
});
// 加载多个模块
require.async(['./c', './d'], function(c, d) {
// do something
});
});
require.resolve
使用 require() 的内部机制来解析并返回模块路径。该函数不会加载模块,只返回解析后的路径。
require.load
该方法可用来异步加载脚本,并在加载完成后,执行指定的回调函数。开发插件时, 可以通过覆盖该方法来实现自定义的资源加载。
require.constructor
有时候,我们需要给所有 require 参数对象添加一些公用属性或方法。这时, 使用 require.constructor 来实现会非常方便。
module
module 参数存储模块的元信息。拥有以下成员:
module.id
当前模块的唯一标识。 require(module.id) 必然返回此模块的 exports 。
define(function(require, exports, module) {
console.log(module.id); // http://path/to/this/file.js
console.log(require(module.id) === exports); // true
});
module.dependencies
module.dependencies 是一个数组,表示当前模块的依赖列表。
该数组只读:模块加载完成后,修改该数组不会有任何效果。
module.exports
exports 对象由模块系统创建,这不能满足开发者的所有需求, 有时候会希望 exports 是某个类的实例。 这时可用 module.exports 来实现:
define(function(require, exports, module) {
console.log(module.exports === exports); // true
module.exports = new SomeClass();
console.log(module.exports === exports); // false
});
注意,对 module.exports 的赋值需要同步执行,它不能放在回调函数里。 下面这样是不行的:
x.js:
define(function(require, exports, module) {
setTimeout(function() {
module.exports = { a: "hello" };
}, 0);
});
y.js:
define(function(require, exports, module) {
var x = require('./x');
console.log(x.a); // undefined
});
module.constructor
有时候,我们需要给所有 module 参数对象添加一些公用属性或方法。在这种情况下, 使用module.constructor 可以很好地满足需求。
extend.js:
define(function(require, exports, module) {
var Module = module.constructor;
Module.prototype.filename = function() {
var id = this.id;
var parts = id.split('/');
return parts[parts.length - 1];
};
});
a.js:
define(function(require, exports, module) {
exports.filename = module.filename();
});
sea.js说明文档的更多相关文章
- Sea.js 手册与文档
Sea.js 手册与文档 首页 | 索引 目录 何为 CommonJS 何为 CommonJS 模块 为何封装模块 何为 CommonJS? CommonJS 是一个有志于构建 JavaScript ...
- Seajs是什么及sea.js 由来,特点以及优势
Seajs是什么及sea.js 由来,特点以及优势 这篇文章主要介绍了Seajs的相关知识和和学习心得,适合刚接触SeaJS的同学,需要的朋友可以参考下,有更好的新手教程或文档,欢迎推荐.分享 1 ...
- SWFUpload 2.5.0版 官方说明文档 中文翻译版
原文地址:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setFileUploadLimit SWFUpload v2 ...
- Sea.js创始人玉伯的前端开发之路
在Web应用程序的用户体验越来越被重视的今天,前端开发的地位也上升到了前所未有的高度,而随之而来的也有更多的挑战. 为了将前端开发者繁重的工作变得简单,框架应运而生.国内也不乏一些非常优秀的前端开发框 ...
- 对 Sea.js 进行配置(一) seajs.config
可以对 Sea.js 进行配置,让模块编写.开发调试更方便. seajs.config seajs.config(options) 用来进行配置的方法. seajs.config({ // 别名配置 ...
- 【开源专访】Sea.js创始人玉伯的前端开发之路
摘要:玉伯,淘宝前端类库 KISSY.前端模块化开发框架SeaJS.前端基础类库Arale的创始人.本期[开源专访]我们邀请玉伯来为我们分享一些关于前端框架.前端开发的那些事,以及前端大牛是如何炼成的 ...
- 模块化开发之sea.js实现原理总结
seajs官网说:seajs是一个模块加载器,所以学习它并不难. 在我的理解就是:本来我们是需要手动创建 script标签 引入 js文件的,但用seajs后,它就自动帮我们完成这些工作. 这里只说实 ...
- 记录:sea.js和require.js配置 与 性能对比
最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放 ...
- 深入学习sea.js
入门学习了文档之后,在深入学习里面的一些有趣的知识点 =================================== 一.配置 seajs.config({ alias:( a3:'./js/ ...
随机推荐
- xcopy拷贝判断是否成功 robocopy排除子目录
xcopy \\172.16.22.65\server\*.* C:\Inetpub\wwwroot\Server /h /r /s /yif %errorlevel% neq 0 echo copy ...
- 将SCOM2007代理升级到 System Center 2012 SP1
使用以下过程可以升级到 System Center 2012 Service Pack 1 (SP1), Operations Manager工程师.您应首先验证代理程序满足最小受支持的配置.有关详细 ...
- XML和HTML中常用转义字符:
XML和HTML中都有一些特殊的字符,这些字符在XML和HTML中是不能直接使用的,如果必须使用这些字符,应该使用其对应的转义字符. XML常用转义字符: 字符 转义字符 描述 & & ...
- 【50】了解new和delete的合理替换时机
1.有时候,我们替换掉编译器提供的new或者delete.首先思考,为什么想要替换?下面是三个常见理由: a.用来检测运用上的错误,超额分配一些内存,再额外的空间放置一些内存: b.为了强化效能,编译 ...
- Mac Pro更换SSD后,在Win7下启用ACHI的方法AHCI
在Mac Pro下更换SSD后,如果安装Win7,要将SSD改为AHCI模式是非常麻烦的.本文介绍如何将Mac的Win7下的SSD改为AHCI方式驱动,及几种常见问题的处理. 一.当Lion与Win7 ...
- 使用日志服务LogHub替换Kafka
https://yq.aliyun.com/articles/35979#index_section
- (原)linux 编译 lwqq
1.安装工具 apt-get install automake apt-get install autoconf apt-get install libtool apt-get install lib ...
- 定时自动同步文件,支持多文件夹同步,支持过滤文件和文件夹,解决FileSystemWatcher多次文件触发事件(源码)
博客园里面有很多同步工具和软件,关于FileSystemWatcher类解释的也很多,但收集了很多文章后,感觉没好的方法,自己没事写了一个定时文件同步,借鉴了很多博客园朋友的东西: 上主菜: 配置文件 ...
- 【转】Adobe CC 的下载地址
http://trials3.adobe.com/AdobeProducts/AEFT/12/win64/AfterEffects_12_LS20.7z http://trials3.adobe.co ...
- 有(无)符号char型及其溢出问题
转载自:http://blog.sina.com.cn/s/blog_70ec9a6f01014j1h.html 1.char的有无符号类型 char 分为有符号性(signed)和无符号型(unsi ...