从 requirejs.org 的首页出发,接下来是快速入门和下载,我们来看下载页面:Download

产出物

RequireJS 提供了三个文件:

  1. require.js — 这是核心文件,提供 JavaScript 文件和模块加载功能
  2. require-jquery.js — 打包了 jquery 最新版本的 require.js
  3. r.js — 优化工具,以及让 RequireJS 的模块可运行于 Node 和 Rhino 环境

SeaJS 提供的内容,目前也有三部分:

  1. sea.js — 模块加载器
  2. modules — 可运行在 seajs 环境中的推荐模块,在这里下载 modules.seajs.com
  3. spm 等优化和支持工具

如果安装了 spm, 可以用 spm 获取到 seajs 提供的一切

1
2
3
$ spm install seajs   # 安装 sea.js
$ spm install jquery  # 安装 modules 中的模块
$ spm build a.js      # 压缩、打包等操作

SeaJS 的这种设计,是由其广义定位(浏览器端的 NodeJS)决定的。在这种设计下:

1). require-jquery.js 必要性不大,在 SeaJS 里,用户直接手工或用 combo 服务合并就好:

1
http://a.tbcdn.cn/libs??seajs/1.0.2/sea.js,jquery/1.6.4/jquery.js

简单灵活,扩展性也好。需要打包其他类库时,只需更改 url 参数。

2). r.js 在 SeaJS 里也是不必要的。modules 项目中的模块,比如 backbone,目前可以直接运行于三种环境中

在浏览器中直接使用:

1
<script src="http://modules.seajs.com/backbone/0.5.3/backbone.js"></script>

通过 seajs 加载:

1
2
3
4
5
<script src="http://modules.seajs.com/seajs/1.0.2/sea.js"></scipt>
<script>
seajs.use('backbone/0.5.3/backbone', function(BB) {
});
</script>

在 node 中直接调用:

1
var BB = require('./libs/backbone/0.5.3/backbone');

SeaJS 的方式接近 NodeJS,简洁优雅,致力于生态圈的形成。

插件

RequireJS 提供了一系列插件:text, order, domReady, cs, i18n.

SeaJS 默认只支持 js 和 css 模块,通过 text、coffee 和 less 插件来扩展支持的模块类型。SeaJS 还提供了 map 插件,方便开发调试:在线本地调试大观。对于 order 功能,推荐组合使用 LABjs 来实现。需要 domReady 时,则使用 jQuery 库。至于 i18n, 感觉放在模块加载框架里不太合适,可以做成独立的国际化模块。

插件实现机制上,RequireJS 采用的是钩子模式:在 require.js 源码中,主动判断并调用插件代码。

1
2
3
4
// require.js
function callPlugin(pluginName, depManager) {
  //...
}

SeaJS 的实现方式是,和原生 JavaScript 类似,暴露 prototype, 插件开发者通过给 prototype 添加新方法或覆盖原有方法来实现插件功能:

1
2
3
4
5
6
7
8
9
10
11
// plugin-xx.js
define(funtion(require, exports, module) {
  var Require = require.constructor;
  var Module = module.constructor;
  // 覆盖原有方法
  Require.prototype.resolve = ...
  // 添加新方法
  Module.prototype.extend = ...
});

这种方式的好处是,在 sea.js 的代码中,合理暴露 prototype 后,就不用怎么为插件考虑了。有了 prototype, 插件作者一定程度上可以“随心所欲”。

进一步了解,请阅读源码:src/plugins

小结

SeaJS 的产出物受广义定位影响,和 RequireJS 的定位是不一样的。后续会进一步分析两者的差异。

插件的设计无优劣。RequireJS 的方式很简单,对插件作者的要求不高。SeaJS 的插件开发方式,好处是 sea.js 本身可以保持很纯粹,不足之处是需要插件作者对 SeaJS 比较熟悉,入门更高。

后续博文会分析两者在 API 和使用场景上的差异。

从 RequireJS 到 SeaJS(2)相关推荐

  1. CommonJs, AMD/RequireJs,CMD/seajs

    JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解 ...

  2. 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs

    从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs [前端神秘的面纱] 对后端开发来说,前端是神秘的, 眼花缭乱的技术,繁多的框架, 如果你 ...

  3. LABjs、RequireJS、SeaJS

    LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行.LABjs 通过优雅的语法(script 和 wait)实 ...

  4. 模块化以及requirejs和seajs

    我们用模块化的思想进行网页的编写是为了更好的管理我们的项目 模块与模块之间是独立存在的,每个模块可以独立的完成一个子功能. 模块化所涉及的规范commonjs,AMD,CMD,UMD 其中的commo ...

  5. requireJS和seajs区别?

    都是用来处理js模块加载,采用的定义规范不同,requireJS采用的是AMD,seajs采用的是CMD. AMD,CMD,CommonJS是目前最常用的三种模块化书写规范. CommonJS Com ...

  6. requireJS的基本使用

    requireJS的基本使用 一.总结 一句话总结: requireJS是js端模块化开发,主要是实现js的异步加载,和管理模块之间的依赖关系,便于代码的编写和维护 1.页面加载的js文件过多的缺点是 ...

  7. java模块化按需加载,JavaScript模块化之使用requireJS按需加载

    模块加载器的概念可能稍微接触过前端开发的童鞋都不会陌生,通过模块加载器可以有效的解决这些问题: JS文件的依赖关系. 通过异步加载优化script标签引起的阻塞问题 可以简单的以文件为单位将功能模块化 ...

  8. SeaJS从入门到原理

    1.前言 SeaJS 是一个模块加载器,模块加载器需要实现两个基本功能: 实现模块定义规范,这是模块系统的基础. 模块系统的启动与运行. 下文会围绕模块定义规范以及模块系统的启动与运行两方面进行讲解, ...

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

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

最新文章

  1. Android 自定义ScrollView ListView 体验各种纵向滑动的需求
  2. python画图颜色表示大小变化_python画图(线条颜色、大小、类型:点、虚线等)(图文详细入门教程四)...
  3. 开卡教程_流量卡开卡教程(必看)
  4. Vue 前端导出后端返回的excel文件
  5. IntelliJ IDEA 2020 数据库连接Oracle和Mysql
  6. java 字符串转dom对象_xml类型的字符串转换为Dom对象
  7. 简述python常用的函数模块_Python学习笔记(十三)—函数常用模块
  8. Oracle大型数据库在AIX UNIX上的实战详解
  9. 从html富文本中提取纯文本
  10. perl语言中数组初始化为空和undef的不同
  11. 利用Matlab求解Stewart并联机构位置正解,方法为牛顿迭代法
  12. 学计算机的该不该参加培训机构
  13. C语言之switch语句用法
  14. python 全部缩进一行_Python(青铜时代)——基本概念
  15. BCompare替代UltraCompare(UltraEdit)
  16. 工业互联网大数据之数据管理与治理的简易理解
  17. 航空客运订票系统C语言程序设计,航空客运订票系统的程序算法?
  18. CVPR2021:Found a Reason for me? Weakly-supervised Grounded Visual Question Answering using Capsules
  19. 经典语录大全微信小程序源码下载多种分类语录
  20. 分享 | 自定义属于自己的U盘图标

热门文章

  1. tomcat URL乱码问题
  2. Project Tango 的一些应用
  3. 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
  4. 黑客与画家 part1 版权声明 part2 O'Reilly Media,Ina.介绍
  5. 创建RGB、CMYK颜色分量圆代码
  6. fuse的API修改
  7. 关于无线的Idle Timeout和Session Timeout
  8. Django框架创建
  9. POSIX 线程编程(二)线程建立与终止
  10. 我也来推荐一个强大的flash应用