1.Sea.Js是什么

seajs相对于RequireJs与LabJS就比较年轻,2010年玉伯发起了这个开源项目,SeaJS遵循CMD规范,与RequireJS类似,同样做为模块加载器。示例

// File:greet.js
define(function (require, exports) {
function helloPython() {
document.write("Hello,Python");
}
function helloJavaScript() {
document.write("Hello,JavaScript");
}
exports.helloPython = helloPython;
exports.helloJavaScript = helloJavaScript;
}); // File:usegreet.js
sea.use("greet", function (Greet) {
greet.helloJavaScript();
});

2.Sea.Js使用指南

模块定义的三种方式

a.

define(function(require, exports, module) {
// 模块代码
// 使用require获取依赖模块的接口
// 使用exports或者module来暴露该模块的对外接口
})

b.

define(function(require, exports) {
var Vango = require('vango')
exports.drawCircle = function () {
var vango = new Vango(document.body, 100, 100)
vango.circle(50, 50, 50, {
fill: true,
styles:{
fillStyle:"red"
}
})
}
})

c.

define(function(require, exports, module) {
var Vango = require('vango');
module.exports = {
drawCircle: function () {
var vango = new Vango(document.body, 100, 100);
vango.circle(50, 50, 50, {
fill: true,
styles:{
fillStyle:"red"
}
});
}
};
});

注意:必须保证参数的顺序,即需要用到require, exports不能省略;在模块中exports对象不可覆盖,如果需要覆盖请使用module.exports的形式。

d.“具名模块”:Sea.js从用于生产的角度来说,必须支持具名模块,因为开发时模块拆得太小,生产环境必须把这些模块文件打包为一个文件,这时再use相应的模块时,需要通过ID来指向。针对此需求,Seajs基本约定原则:ID 和路径一致原则

define('drawCircle', ['vango'], function(require, exports) {
var Vango = require('vango');
exports.drawCircle = function () {
var vango = new Vango(document.body, 100, 100);
vango.circle(50, 50, 50, {
fill: true,
styles:{
fillStyle:"red"
}
});
};
})

SeaJs环境配置:

Sea.js通过.configAPI来进行配置。你甚至可以在多个地方调用seajs.config来配置,配置多个之后,相关属性合并起来

base:String,在解析绝对路径标识的模块时所使用的base路径,使用base配置,根本上可以分离静态文件的位置,比如使用CDN(如何把静态文件分布到CDN上?)

paths:Object,如果目录太深,可以使用paths这个配置项来缩写,可以在require时少写些代码。

alias:Object,本质上看不出和paths有什么区别,区别就在使用的概念上。

preload配置项可以让你在加载普通模块之前提前加载一些模块

模块的使用:

a. seajs.use(id)

seajs.use('./main')

b.seajs.use(ids, callbacks)

seajs.use('./main', function(main) {
main.init()
})

Sea.js执行ids中的所有模块,然后传递给callback使用。

SeaJs的Plugin

  • seajs-text:用来加载HTML或者模板文件;
  • seajs-style:提供了importStyle,动态地向页面中插入css;
  • seajs-combo:该插件提供了依赖combo的功能,能把多个依赖的模块uri combo,减少HTTP请求;
  • seajs-flush:该插件是对seajs-combo的补充,或者是大杀器,可以先hold住前面的模块请求,最后将请求的模块combo成一个url,一次加载hold住的模块;
  • seajs-debug:Fiddler用过么?这个插件基本就是提供了这样一种功能,可以通过修改config,将线上文件proxy到本地服务器,便于线上开发调试和排错;
  • seajs-log:提供一个seajs.log API,私觉得比较鸡肋;
  • seajs-health:目标功能是,分析当前网页的模块健康情况。

Plugin的运行机制:

  • 使用Sea.js在加载过程中的事件,注入一些插件代码,修改Sea.js的运行流程,实现插件的功能;
  • 给seajs加入一些方法,提供一些额外的功能。

模块打包:SPM

Sea.Js使用入门的更多相关文章

  1. sea.js 个人入门

    玉伯 : http://seajs.org/docs/ 说这两个JS 必须提到AMD.commonjs两种不同的规范: 奇舞团:http://www.75team.com/archives/882 知 ...

  2. Sea.js入门

    本文只是seajs的入门贴.要详细了解,请看GitHub主页上的相关链接,精彩不断,精选几篇: 前端模块化开发的价值 前端模块化开发的历史 ID和路径匹配原则 与RequireJS的异同 模块的加载启 ...

  3. sea.js 入门

    上个月学了 require.js 现在顺便来学学 sea.js. 对比下这两种的区别,看自己喜欢哪个,就在接下来的项目中去使用它吧. seajs中的所有 JavaScript 模块都遵循 CMD 模块 ...

  4. 深入学习sea.js

    入门学习了文档之后,在深入学习里面的一些有趣的知识点 =================================== 一.配置 seajs.config({ alias:( a3:'./js/ ...

  5. sea.js模块化编程

    * 为什么要模块化? 解决文件依赖 解决命名冲突 ; var var2 = 2; function fn1(){ } function fn2(){ } return { fn1: fn1, fn2: ...

  6. 解决sea.js引用jQuery提示$ is not a function的问题

    在使用sea.js的如下写法引用jQuery文件时, //main.jsdefine(function(require,exports,module){ var $ = require('jquery ...

  7. 模块化开发--sea.js

    当你的网站开发越来越复杂的时候,会经常遇到一下问题吗?1.冲突2.性能3.依赖如果在多人开发或者是复杂的开发过程中会经常遇到这些问 题,就可以用模块化开发来解决.以上问题是如何产生的?1.冲突:如果你 ...

  8. 第三课:sea.js模块加载原理

    模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: function l ...

  9. Seajs是什么及sea.js 由来,特点以及优势

    Seajs是什么及sea.js 由来,特点以及优势 这篇文章主要介绍了Seajs的相关知识和和学习心得,适合刚接触SeaJS的同学,需要的朋友可以参考下,有更好的新手教程或文档,欢迎推荐.分享   1 ...

随机推荐

  1. 第二次冲刺spring会议(第四次会议)

    [例会时间]2014/5/7 21:15 [例会地点]9#446 [例会形式]轮流发言 [例会主持]马翔 [例会记录]兰梦 小组成员:兰梦 ,马翔,李金吉,赵天,胡佳奇

  2. 找斐波那契数列中的第N个数——递归与函数自调用算法

    题目描述 Description 用递归的方法求斐波那契数列中的第N个数 输入输出格式 Input/output 输入格式:一行,一个正整数n输出格式: 一行,一个数,表示斐波那契数列中的第N个数  ...

  3. 读取文件—open()、read()

    摘自:http://www.iplaypython.com/sys/open.html 在Windows下的powershell打开python: Win+R打开运行窗口,输入powershell,输 ...

  4. AJAX 创建表格

    <html><head> <meta http-equiv="Content-Type" content="text/html; chars ...

  5. TouchSlide滚动插件BUG

    TouchSlide滚动切换效果时 nextCell设定自己的class名后无效,需要用".next"或不设置

  6. ASP.NETwindows身份验证详细步骤-域验证登录

    Windows身份验证相比于form身份验证要方便的多,而且会有更好的安全保障. 我个人觉得windows身份验证写法有两种: 第一种非代码方式进行windows身份验证: 第二种是用代码访问活动目录 ...

  7. CSS的基本概念

    <!--CSS 一.概念:CSS的全称是Cascading Style Sheets,层叠样式表,用来控制HTML标签样式,在美化网页中起到非常重要的作用 CSS的编写格式是键值对形式的,比如 ...

  8. 给windows共享 目录付于权限

    1.点右监 共享给 某用户 2.点属性 -> 安全 加入  特定用户 3.域用户的管理 (选择控制面板/用户管理) 第一个用户是本地账户 第2/3个是域用户

  9. 安装Eclipse环境

    1.下载安装JDK,并设置环境变量 2.下载Eclipse,官网下载地址:http://www.eclipse.org/downloads/ 选择相应版本,我选的是Windows 64bit 3.下载 ...

  10. 将当天时间转换为unix时间戳

    /** * @return * * @Title: getDate * @Description: TODO(时间戳转换为String类型的日期数据) * @param @param unixDate ...