Sea.js 手册与文档

Sea.js 手册与文档

首页 | 索引


目录


何为 CommonJS?

CommonJS 是一个有志于构建 JavaScript 生态圈的组织。它有一个 邮件列表,有很多开发者参与其中。 整个社区致力于提高 JavaScript 程序的可移植性和可交换性,无论是在服务端还是浏览器端。

何为 CommonJS 模块?

JavaScript 并没有内置模块系统(反正现在没有),于是 CommonJS 创造了自己的。 传统的 CommonJS 模块如下:

math.js:

exports.add = function() {
  var sum = 0, i = 0, args = arguments, l = args.length;
  while (i < l) {
    sum += args[i++];
  }
  return sum;
};

increment.js:

var add = require(‘math‘).add;
exports.increment = function(val) {
  return add(val, 1);
};

program.js:

var inc = require(‘increment‘).increment;
var a = 1;
inc(a); // 2

为何封装模块?

仔细看上面的代码,您会注意到 require 是同步的。也就是说, 模块系统需要在 require 方法调用返回 之前,就能判定给定模块是否可用(并初始化它)。

然而,这在浏览器端问题多多。

浏览器端,加载 JavaScript 最佳、最容易的方式是在 document 中插入 <script> 标签。但脚本标签天生异步,传统 CommonJS 模块在此类环境中无法正常加载。

解决思路之一是,开发一个服务器端组件,对模块代码作静态分析,将模块与它的依赖列表一起返回给浏览器端。 这很好使,但需要安装额外的组件,并因此要调整一系列底层架构。

另一种解决思路是,用一套标准模板来封装模块定义:

define(function(require, exports, module) {

  // The module code goes here

});

这套模板代码为模块加载器提供了机会,使其能在模块代码执行之前,对模块代码进行静态分析,并动态生成依赖列表。

为了让静态分析可行,需要遵守一些简单的 规则

把上面例子中的模块封装起来,可得到:

math.js:

define(function(require, exports, module) {
  exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
      sum += args[i++];
    }
    return sum;
  };
});

increment.js:

define(function(require, exports, module) {
  var add = require(‘math‘).add;
  exports.increment = function(val) {
    return add(val, 1);
  };
});

program.js:

define(function(require, exports, module) {
  var inc = require(‘increment‘).increment;
  var a = 1;
  inc(a); // 2
});


若干说明源自 FlyScript 的文档。 非常感谢 Kevin H. Smith。

原文地址:https://www.cnblogs.com/wangyfax/p/11784950.html

时间: 2024-10-09 01:16:05

Sea.js 手册与文档的相关文章

强大的矢量图形库:Raphael JS 中文帮助文档及教程

Raphael 是一个用于在网页中绘制矢量图形的 Javascript 库.它使用 SVG W3C 推荐标准和 VML 作为创建图形的基础,你可以通过 JavaScript 操作 DOM 来轻松创建出各种复杂的柱状图.饼图.曲线图等各种图表,还可以绘制任意形状的图形,可以进行图表或图像的裁剪和旋转等复杂操作 Rapha?l 是跨浏览器的矢量图形库,目前支持的浏览器包括: Firefox 3.0+,Safari 3.0+,Chrome 5.0+,Opera 9.5+ 以及 Internet Exp

如何解决用jquery.uploadify.js进行多文档上传会修改document的title

在dwz框架中使用了jquery.uploadify.js进行多文档上传当打开窗口后会发现document的title被无意之中修改.进行代码调试也没有发现.对swfobject进行研究也没有发现修改title的情况. 只能采用一种方式禁止修改title var oldTitle = document.title; try { document.attachEvent('onpropertychange', function(){ if (document.title != oldTitle )

JS如何实现文档加载完成后再去执行代码

JS如何实现文档加载完成后再去执行代码:在执行某些操作的时候,需要当文档完全加载完成之后再去执行,否则可能出现意向不到的情况,先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title&g

Ext JS 6学习文档–第1章–ExtJS入门指南

Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS 6 的电子书 [Ext JS 6 By Example].这份资料在 PACKT 上卖 35.99 刀的,当然了万能的 google 还是帮我下载到了 PDF 文档.大概看了一下,讲的很详细,例子也比较简单,容易理解,现我准备利用工作之余翻译这份文档,为自己学习加深理解,也希望能帮助更多的人学习.

常用的技术类在线参考手册与文档资料

平常学习编程或者模块, 有很多在线帮助文档或者手册可以参考, 查询, 现在把它们记下来, 再次寻找的时候比较方便. 文档类: 爬虫: Scrapy1.2 文档: http://python.usyiyi.cn/translate/scrapy_12/index.html Beautiful Soup 4.4.0 中文文档: http://beautifulsoup.readthedocs.io/zh_CN/latest/ Requests中文参考手册: http://cn.python-requ

JS Range HTML文档/文字内容选中、库及应用介绍

一.前面的些话 本文的内容基本上是基于"区域范围对象(Range objects)"这个概念来说的.这个玩意,可以让你选择HTML文档的任意部分,并可以拿这些选择的信息做你想做的事情.其中,最常见的Range是用户用鼠标选择的内容(user selection). 本文有不少篇幅就是讲如何将用户的这种选择转换为W3C Range或Microsoft Text Range对象. 二.什么是Range? 所谓"Range",是指HTML文档中任意一段内容.一个Range

Ext JS 6学习文档-第3章-基础组件

基础组件 在本章中,你将学习到一些 Ext JS 基础组件的使用.同时我们会结合所学创建一个小项目.这一章我们将学习以下知识点: 熟悉基本的组件 – 按钮,文本框,日期选择器等等 表单字段的校验 菜单和工具栏 设计一个表单 计算器程序– 本章的示例项目 转载请注明出处:http://www.jeeboot.com/archives/1219.html 本章的主要目的是创建一个表单设计和一个计算器示例项目.以下图分别展示了表单设计和计算器设计. 首先,你观察下列表单设计,你会发现我们使用了大量的控

Ext JS 6学习文档–第2章–核心概念

核心概念 在下一章我们会构建一个示例项目,而在这之前,你需要学习一些在 Ext JS 中的核心概念,这有助于你更容易理解示例项目.这一章我们将学习以下知识点: 类系统,创建和扩展类 事件 Ext JS 对象的查询 容器 布局 转载请注明出处:http://www.jeeboot.com/archives/1217.html class system(类系统) Ext JS 提供了很多功能,使得它创建和处理类变得简单.以下是在 Ext JS 6 的类系统中的几大组成类: Ext Base Clas

一些js在线引用文档

1.jquery在线引用: <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> (可以登录网站:http://www.jq22.com/jquery-info122查看更多的jq版本) jquery 2.0版本以上不支持IE6.7.8 2.bootstrap在线引用 <script src="https://cdn.static.runoob.com/libs/b