“仅做一件事,做好一件事。”

这个应该就是seaJs的精髓了。

我在自己的一些项目中使用过seaJs。对其算是了解一二。如今就班门弄斧。轻轻地谈一下。

首先上一段度娘的话:

seaJs是一个遵循CommonJs规范的JavaScript模块载入框架,能够实现JavaScript的模块化开发及载入机制。与jQuery等JavaScript框架不同。SeaJS不会扩展封装语言特性,而仅仅是实现JavaScript的模块化及按模块载入。SeaJS的主要目的是令JavaScript开发模块化并能够轻松愉悦进行载入,将前端project师从繁重的JavaScript文件及对象依赖处理中解放出来。能够专注于代码本身的逻辑。SeaJS能够与jQuery这类框架完美集成。使用SeaJS能够提高JavaScript代码的可读性和清晰度。解决眼下JavaScript编程中普遍存在的依赖关系混乱和代码纠缠等问题,方便代码的编写和维护。”

1.下载seaJs

下载url:https://github.com/seajs/seajs

我们能清楚地看到,docs是文档。dist是压缩好的、用于浏览器端的SeaJS代码;src则是源码。

package.json + Gruntfile.js就是Grunt构建工具所须要的文件。用来合并压缩等等。

看完代码结构,如今就開始说一下里面的基本使用方法。

2.seaJs的基本使用方法

2.1 用seajs.config来进行路径和文件依赖的配置。

譬如:

seajs.config({

  // 别名配置
alias: {
'es5-safe': 'gallery/es5-safe/0.9.3/es5-safe',
'json': 'gallery/json/1.0.2/json',
'jquery': 'jquery/jquery/1.10.1/jquery'
}, // 路径配置
paths: {
'gallery': 'https://a.alipayobjects.com/gallery'
}, // 变量配置
vars: {
'locale': 'zh-cn'
}, // 映射配置
map: [
['http://example.com/js/app/', 'http://localhost/js/app/']
], // 预载入项
preload: [
Function.prototype.bind ? '' : 'es5-safe',
this.JSON ? '' : 'json'
], // 调试模式
debug: true, // Sea.js 的基础路径
base: 'http://example.com/path/to/base/', // 文件编码
charset: 'utf-8'
});

更加具体的配置 ,能够參考:https://github.com/seajs/seajs/issues/262

2.2 用seajs.use在页面中载入一个或多个模块,callback 參数可选。省略时,表示无需回调。

继续看代码:

// 载入模块 common,并在载入完毕时,运行指定回调
seajs.use('./common', function(main) {
common.init();
});
// // 并发载入模块 x 和模块 y。并在都载入完毕时,运行指定回调
seajs.use(['./x', './y'], function(x, y) {
x.init();
y.init();
});

2.3 用define定义模块和获取模块。

详细调用例如以下:

define(function(require, exports, module) {

  // 你要写的模块代码

});

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

define(function(require) {

  // 获取模块 x 的接口
var x = require('./x'); // 调用模块 x 的方法
x.doSomething();
});

2.5 用require.async在模块内部异步载入一个或多个模块。

define(function(require) {

  // 异步载入一个模块,在载入完毕时。运行回调
require.async('./b', function(b) {
b.doSomething();
}); // 异步载入多个模块,在载入完毕时。运行回调
require.async(['./c', './d'], function(c, d) {
c.doSomething();
d.doSomething();
}); });

ps:此段代码copy自官网參考文档。

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

define(function(require, exports) {

  //这一句对外提供了一个属性todo
exports.todo = 'wt'; });

3.注意和规范

肤浅地过了一遍主要的使用方法之后,接下来就说一下要注意的东西了。

3.1模块工厂构造方法的第一个參数 必须 命名为 require 。

// 错误!
define(function(req) {
// ...
});
// 错误!
define(function(r) {
// ...
}); // 正确!
define(function(require) {
// ...
});

3.2不要给 require 又一次赋值或者不能把这个函数重命名。

// 错误
var yilai = require, a= yilai ("./mod"); // 错误
require = function() {}; // 错误
function todo(require) {} // 错误
function todo() {
var require = function() {};
}

3.3require 的參数值不能是字符串直接量之外的其它变量。

// 错误!
require(todo); // 错误!
require("to-" + "do"); // 错误!
require("todo".toLowerCase());

总结:使用 Sea.js。提高代码的可维护性。高效性。灵活性。粒子性和可移植性。总结得有点虚,可是seaJs确实给项目的开发带来了非常多的便利。

还不用seaJs。你就凹凸慢了。

注:此 文章參考了官网的非常多文章,编写而来。想知道得很多其它的童鞋。请点击这里:http://seajs.org/docs/#docs

Author: Alone

Antroduction: 高级前端开发project师

Sign: 人生没有失败。仅仅有没到的成功。

博主相关文章推荐:

有趣的前端题目。看了不懊悔

移动端前端开发概述

浅谈
标签的语义化

浅谈鼠标滚轮事件

不积跬步无以至千里----高度自适应的textarea

sass和less,优秀的前端样式预处理器

视差滚动的那些事儿


轻轻谈一下seaJs——模块化开发的利器的更多相关文章

  1. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  2. seaJs模块化开发简单入门

    随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...

  3. seajs模块化开发

    seajs是一个起辅助作用的库,所以它可以更方便开发,而它可以解决以下问题: 1.命名问题,就是冲突 2.性能问题,就是只要一个功能,但却使用一个大插件中的一个小功能,所以要手动拆分出这个功能 3.j ...

  4. 2.精通前端系列技术之JavaScript模块化开发 seajs(一)

    在使用seajs模块化开发之前,直接在页面引用js会容易出现冲突及依赖相关的问题,具体问题如下 问题1:多人开发脚本的时候容易产生冲突(比如全局参数冲突,方法名冲突),可以使用命名空间降低冲突,不能完 ...

  5. JS模块化开发(一)——seaJs

    模块化开发要解决的问题: 1.冲突 比如:多人协作开发时,不同js库中的函数重名问题 可以用命名空间解决: var module={} module.a=1; module.b=function(){ ...

  6. JS模块化开发:使用SeaJs高效构建页面

    一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...

  7. JavaScript模块化开发库之SeaJS

    SeaJS是一个很好的前端模块化开发库,源码不到1500行,压缩后才4k,质量极高.

  8. seajs进行模块化开发

    seajs进行模块化开发 模块化前端开发入门指南(二) 2015-08-26 15:23 by paseo, 370 阅读, 0 评论, 收藏, 编辑 概览 使用seajs模块化加载器进行模块化开发, ...

  9. seajs的模块化开发--实践笔记

    2017-04-02 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.有效的解决复杂项目中命名冲突.依赖.性能等问题. SeaJS ...

随机推荐

  1. 使用Flex图表组件

    原文 http://blog.csdn.net/mylxiaoyi/article/details/1618470 使用Flex图表组件 以图表或是图的方式显示数据的能力可以使得Flex程序用户的数据 ...

  2. CC++初学者编程教程(11) 配置Windows数据库服务器

    1.我们新建一个虚拟机. 2. 选择默认的WorkStation10.0. 3.我们选择VS2012的镜像. 4.我们设置用户密码,跳过WindowsSever2012密钥 5.我们选择是,稍后手动激 ...

  3. 通信基站(dfs回溯,思维)

    Description Input Output

  4. spoj 8222 Substrings (后缀自动机)

    spoj 8222 Substrings 题意:给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值.求F(1)..F(Length(S)) 解题思路:我们构造S的SAM,那么对于 ...

  5. 最受欢迎的8位Java大师

    面是8位Java牛人,他们为Java社区编写框架.产品.工具或撰写书籍改变了Java编程的方式. P.S 以下排名纯属个人喜好. 1. Tomcat & Ant创始人 James Duncan ...

  6. c#常见操作

    1. StreamWriter - 文件写入类StreamWriter s = new StreamWriter(address + "/Menu.ini", true);s.Wr ...

  7. 如何生成log新信息背景图片和在图片上添加水印

    在图片上添加文字水印,其实就是要用到两个类, using System.Drawing;             using System.Drawing.Drawing2D; 废话不多说了,直接上代 ...

  8. wcf系列5天速成——第二天 binding的使用(2)

    承接上一章,今天来讲MSMQ在实战项目中的应用.众所周知,放了防止订单丢失,我们都是采用Order过一下MSMQ. MSMQ的优点个人认为是:先天的异步消息发送和天生的自动负载均衡. 好了,看看MSM ...

  9. vue+webpack一些知识

    使用mac的用户需要获取权限才可以使用npm install指令 设置node目录的权限指令 sudo chmod -R 777 /usr/local/lib/node_modules/ 大家都知道国 ...

  10. C#自定义字符串替换Replace方法

    前一阵遇到一个如标题的算法题,是将原有字符串的某些片段替换成指定的新字符串片段,例如将源字符串:abcdeabcdfbcdefg中的cde替换成12345,得到结果字符串:ab12345abcdfb1 ...