模块标识

模块标识是一个字符串,用来标识模块。在 requirerequire.async 等加载函数中,第一个参数都是模块标识。define 函数的 dependencies 参数也是由模块标识组成。

SeaJS 中的模块标识是 CommonJS 模块标识 的超集:

  1. 一个模块标识由斜线("/")分隔的多项组成。
  2. 每一项必须是小驼峰字符串、"."".."
  3. 模块标识可以不包含文件后缀名,比如 ".js"
  4. 模块标识可以是“相对”或“顶级”标识。如果第一项是 ".""..",则该模块标识是相对标识。
  5. 顶级标识根据模块命名空间的根路径来解析。 ~~相对base路径?
  6. 相对标识相对 require 所在模块的标识来解析。 ~~相对当前模块的URI?

注意,符合上述规范的标识肯定是 SeaJS 的模块标识,但 SeaJS 能识别的模块标识不需要完全符合以上规范。 比如,除了大小写字母组成的小驼峰字符串,SeaJS 的模块标识字符串还可以包含下划线和连字符, 甚至可以以 "http://""https://""file:///" 等协议标识开头。

相对标识

相对标识只出现在模块环境中,以 "." 开头。会相对当前模块的 URI 来解析:

// 在 http://example.com/js/a.js 中:
require('./b');
// => http://example.com/js/b.js

顶级标识

顶级标识不以点(".")或斜线("/")开始, 会相对 SeaJS 的 base 路径来解析:

// 假设 base 路径是:http://example.com/js/libs/

// 在模块代码里:
require('jquery/1.7.1/jquery');
// => http://example.com/js/libs/jquery/1.7.1/jquery.js

base 路径的默认值,与 sea.js 的路径相关:~~~感觉seajs的路径解析机制比requirejs的简单,以 " . " 开始的相对路径是相对当前模块URI的,其他相对路径是相对 base路径的

如果 sea.js 的路径是:
http://example.com/js/libs/sea.js ~~~base路径默认为sea.js的URI
则 base 路径为:
http://example.com/js/libs/

sea.js 路径中含有版本号时,base 不会包含 seajs/x.y.z 字串。 当类库模块有多个版本时,这样会更方便。

如果 sea.js 的路径是:
http://example.com/libs/seajs/1.0.0/sea.js
则 base 路径是:
http://example.com/libs/

当然,也可以手工配置 base 路径:

seajs.config({
base: 'http://code.jquery.com/'
}); // 在模块代码里:
require('jquery');
// => http://code.jquery.com/jquery.js

普通路径

除了相对和顶级标识之外的标识都是普通路径。普通路径的解析规则,和 HTML 代码中的 script.src 一样,会相对当前页面来解析。

// 在 http://example.com/js/main.js 中:
require('http://example.com/js/a');
// => http://example.com/js/a.js // 在 http://example.com/js/a.js 中:
require('/js/b');
// => http://example.com/js/b.js // 在任何代码里:
seajs.use('./c'); //~~~seajs.use的模块标识 总是相对包含seajs页面的路径
// => http://example.com/path/to/page/c.js

seajs.use(ids, ...)define(id, ...) 中的模块标识始终是普通路径,因为这两个方法是在全局环境中执行的。

文件后缀的提示

除非在路径中出现井号("#")或问号("?"),SeaJS 在解析模块标识时, 都会自动添加 JS 扩展名(".js")。如果不想自动添加扩展名,最简单的方法是, 在路径末尾加上井号("#")。

// ".js" 后缀可以省略:
require('http://example.com/js/a');
require('http://example.com/js/a.js');
// => http://example.com/js/a.js // ".css" 后缀不可省略: ~~~seajs可以直接加载css文件,requirejs加载css文件需要插件require-css
require('http://example.com/css/a.css');
// => http://example.com/css/a.css // 当路径中有问号("?")时,不会自动添加后缀:
require('http://example.com/js/a.json?callback=define');
// => http://example.com/js/a.json?callback=define // 当路径以井号("#")结尾时,不会自动添加后缀,且会在解析时,去掉井号:
require('http://example.com/js/a.json#');
// => http://example.com/js/a.json

转: seajs手册与文档之 -- 模块标识的更多相关文章

  1. 转: seajs手册与文档之--模块定义

    模块定义 define id dependencies factory exports require require.async require.resolve require.load requi ...

  2. 转: seajs手册与文档之 -- 配置选项

    config alias preload debug map base charset timeout noConflict config 可以使用 config 方法来配置seajs. seajs. ...

  3. 转: seajs手册与文档之 -- require规则

    require 规则 正确拼写 不要修改 使用直接量 动态依赖的小提示 书写规则 使用 SeaJS 书写模块代码时,需要遵循一些简单规则: 1. 正确拼写 在模块代码中,第一个参数 必须 命名为 re ...

  4. 转: seajs手册与文档之 -- 快速参考 ( ~~useful )

    目录 快速参考 seajs.use seajs.config define require require.async exports module.exports 快速参考 该页面列举了 SeaJS ...

  5. Sea.js 手册与文档

    Sea.js 手册与文档 首页 | 索引 目录 何为 CommonJS 何为 CommonJS 模块 为何封装模块 何为 CommonJS? CommonJS 是一个有志于构建 JavaScript ...

  6. Winform开发框架中的内容及文档管理模块功能介绍

    在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...

  7. Seajs教程 配置文档

    seajs.config Obj alias Obj 别名配置,配置之后可在模块中使用require调用require('jQuery'); seajs.config({ alias:{ 'jquer ...

  8. 三言两语聊Python模块–文档测试模块doctest

    doctest是属于测试模块里的一种,对注释文档里的示例进行检测. 给出一个例子: splitter.pydef split(line, types=None, delimiter=None): &q ...

  9. Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)

    OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变当前脚本工作目 ...

随机推荐

  1. struts Value Stack 值栈

    首先声明:本文是从博客园博友的文章转载过来的,感觉说的不错.在此附上地址:http://www.cnblogs.com/jerryxing/archive/2012/04/23/2467299.htm ...

  2. Hadoop-04-HBase全然分布式环境搭建

    Hbase分布式具体安装步骤 Hadoop全然分布式环境已经搭建完毕(參见01_Hadoop全然分布式环境搭建). 注意:Hbase和Hadoop的版本号必须相应! 不然会出现各种问题! 这里选用的是 ...

  3. Amazon S3 API

    一.概述 Amazon s3,全称为Amazon Simple Storage  Service.EC2和S3是Amazon最早推出的两项云服务. REST,这也是比较火的一种Web服务架构.简单来说 ...

  4. xcode 不值钱的动画UIButton

    #import "ViewController.h" @interface ViewController () /** 按钮 */ @property(nonatomic,weak ...

  5. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

    效果图 上传文件页面: 下载文件页面:  1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="tr ...

  6. Java中public,private,final,static等概念的解读

    作为刚入门Java的小白,对于public,private,final,static等概念总是搞不清楚,到底都代表着什么,这里做一个简单的梳理,和大家分享,若有错误请指正,谢谢~ 访问权限修饰符 pu ...

  7. 初步认识ExtJS

    最近因为项目,需要去学习ExtJS的相关内容. 现在对于ExtJS完全是小白一枚. 目前使用的是ExtJS4.2的版本,官网上现在最新版本是6的. 第一个方法:Ext.onReady() Ext.on ...

  8. django-rest-framework 快速开始

    搭建项目 # Set up a new project django-admin.py startproject tutorial cd tutorial # Create a virtualenv ...

  9. iOS中UIWebView使用JS交互 - 机智的新手

    iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html & ...

  10. jQuery selector 选择器

    基本选择器 1. id选择器(指定id元素)将id="one"的元素背景色设置为黑色.(id选择器返单个元素) $(document).ready(function () { $( ...