05 2013 档案
摘要:该页面列举了 SeaJS 中的常用实战过程中的问题。只要掌握这些方法,就可以娴熟地开始对你的网站进行模块化开发了。默认情况下,SeaJS 要求所有文件都是标准的 CMD 模块,但现实场景下,有大量 jQuery 插件等非 CMD 模块存在。在 SeaJS 里,通过以下方式,可以直接调用非标准模块。全站通用的要加载的库只写一次,而不想每个js里都调用,太繁琐//可以放在在 init.js 里暴露到全局,这样,所有在 init.js 之后载入的文件,就都可以直接通过全局变量来拿 $ 等对象。seajs.use('init')//init.jsdefine(function(requ
阅读全文
摘要:前言SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaScript文件及对象依赖处理中解放出来,可以专注于代码本身的逻辑。SeaJS可以与jQuery这类框架完美集成。使用SeaJS可以提高JavaScript代码的可读性和清晰度,解决目前JavaScript编程中普遍存在的依赖关系混
阅读全文
摘要:不知道上下文的,请先阅读这篇博客:模块加载器获取 URL 的原理使用场景为了便于讨论,先做一些约定:模块原始代码为 S(ource)压缩打包后的模块代码为 C(ompressed)独立文件为 F(ile)内嵌到页面中为 P(page)独立文件中是原始代码时,记为 SF;独立文件中是压缩打包后的代码时,记为 CF内嵌的原始代码记为 SP;内嵌的压缩打包后的代码记为 CP压缩打包是指代码压缩、模块信息补全、编译、合并等操作。使用场景可概况为一句话:SF, CF, SP 和 CP 可直接在浏览器中运行,并可同时存在。几点说明:可直接在浏览器中运行,这点很重要。对前端开发来说,浏览器即编译器。增加一层
阅读全文
摘要:浏览器端的模块管理JavaScript 构建的应用越来越复杂,为了提高代码的可维护性,第一步是拆分为多个文件:a.jsb.jsc.js...文件拆开是第一步,为了彼此能互相调用,但又不污染全局造成潜在冲突,于是聪明的程序员们想出了用对象来模拟命名空间:// a.js:X = {};X.a = {...};// b.js:X.b = {...};// c.js:X.c = {...};...这种命名空间得自己维护,当层级达到三层及其以上时,维护起来并不轻松,比如 YAHOO.widget.TreeView。于是出现了类似 YUI3 的扁平方式:// 定义模块YUI.add('a'
阅读全文
摘要:这是该系列的最后一篇。作为模块加载器,最核心的是:模块书写格式。从表层看,RequireJS 和 SeaJS 最大的差异就是各自默认推荐的模块书写格式不同。由于 RequireJS 支持 Simplified CommonJS Wrapper, 一定程度上可以说 SeaJS 是 RequireJS 的一个子集。甚至可以认为:SeaJS 是 RequireJS 中的 The Good Parts.(RequireJS 作者肯定不会同意,不过从社区中可以看出很多人很喜欢 Simplified CommonJS Wrapper 格式,这与 SeaJS 遵循的 Wrappings 基本一致。)功能差异
阅读全文
摘要:理解了ID 规则,再来看 RequireJSAPI 文档就轻松多了。模块书写格式作为模块加载器,需要明确模块应该怎样写,这就是模块书写格式(Module Authoring Format)。对于文件加载器来说,约定非常少,比如 LABjs 只约定文件里不能有 document.write 等语句。RequireJS 遵守的是AMD规范,SeaJS 遵守的是Simple Wrappings规范。从表面上看,AMD 规范和 Wrappings 规范最大的不同是 factory 函数的参数不一样:// 两者的基本格式都是:define(id?, denpendencies?, factory);//
阅读全文
摘要:来看 RequireJS 的 API 页面:api.html, 该篇博客着重分析 RequireJS 和 SeaJS 在 ID 规则上的异同。RequireJS 的 ID 规则对于模块加载器来说,模块 id 遵守的规则非常重要。首先来定义几个概念。假设当前页面路径为http://t.com/a/b/c.html, 则:pageRoot=http://t.compageUrl=http://t.com/a/bbaseUrl: 在 RequireJS 里,默认情况下,baseUrl 就是 pageUrl, 除非:通过 require.config 更改了 baseUrl指定了 data-main,
阅读全文
摘要:从 requirejs.org 的首页出发,接下来是快速入门和下载,我们来看下载页面:Download产出物RequireJS 提供了三个文件:require.js — 这是核心文件,提供 JavaScript 文件和模块加载功能require-jquery.js — 打包了 jquery 最新版本的 require.jsr.js — 优化工具,以及让 RequireJS 的模块可运行于 Node 和 Rhino 环境SeaJS 提供的内容,目前也有三部分:sea.js — 模块加载器modules — 可运行在 seajs 环境中的推荐模块,在这里下载modules.seajs.comspm
阅读全文
摘要:RequireJS 发布 1.0.0 了,很值得关注,看是否有可借鉴之处。本次比较不涉及具体实现代码,主要比较两者的 API 设计。http://requirejs.orghttp://seajs.org从定位谈起首先,从 requirejs.org 首页可以得知,RequireJS 的定位是:RequireJS 是一个 JavaScript 文件和模块加载器,特别为浏览器优化,同时也可运行在 Rhino 和 Node 环境中。SeaJS 的定位是:SeaJS 是一个适用于浏览器端的 JavaScript 模块加载器。不要小看这两句话,任何类库/框架的定位,或者说愿景/目标,最终会决定该类库/
阅读全文