seajs define 详解 seajs中模块的解析规则详解和模块使用总结

这篇文章主要介绍了seajs中模块的解析规则详解和模块使用总结,需要的朋友可以参考下

seajs github 模块标识已经说的相对清楚了。但并没有面面俱到,特别是当你需要手写 【模块ID】和【模块依赖】的时候,或者自己写自动化工具来做 transport 的时候(ps:spm貌似适应性不是很强也不易用,毕竟每个项目的目录结构可能相差很大,且不易改变。当然如果他的定位是包管理工具就别指望它来做你的项目的自动化构建工具了),ID的解析规则就需要了解透彻了。

注意事项:

1. 顶级标识始终相对 base 基础路径解析。

2. 绝对路径和根路径始终相对当前页面解析。

3. require 和 require.async 中的相对路径相对当前模块路径来解析。

4. seajs.use 中的相对路径始终相对当前页面来解析。

seajs中,模块的ID大致可分为三种:【相对标识】、【顶级标识】、【普通路径】,

普通路径包括 “绝对路径”、“根路径”,等。

这里重点说明 【相对标识】 和 【顶级标识】。

相对标识 是指 "./","../" 开头的,如:"./OtherModule", "../lib/Base"。

顶级标识 是指 以文件或目录(可以包含:字母、-、_)开头的,如:"app/widget/Select"

需要写模块ID的地方有三处:

代码如下:define("id (1)",["../id2 (2)"], function(require, exports, module){

var moduleA = require('./moduleA (3)');

})

注意:无论是define第一个参数【模块ID】还是第二个参数【依赖模块的ID】还是【require模块ID】,最终的比对标准是【解析后的文件URI】。

因此,这三处需要写ID 的地方可以以任意一种方式来写,只要最终解析为同一个URI,即被认为是同一个模块。

在解析ID的过程中,会预先经过 seajs.config 中定义的 alias 和 paths 的处理。

base 路径解析规则

(第 1 层,本身的路径不依赖于任何设置)

1. 不可使用【顶级标识】,因为顶级标识就是相对于 base 基础路径来解析的,因此 base 本身只能使用【相对标识】或【根路径】等。

2. base 默认路径为 seajs 的目录,其他情况参见seajs官网,如果不是seajs推荐的源码目录结构,尽量手动设置 base 路径。

3. 【相对标识】:相对于 当前页面 解析。

paths 中路径解析规则

(第 1 层,本身的路径不依赖于任何设置)

1. 【相对标识】:在哪里被引用,相对的解析位置视被引用的地方而定,遵循当地的规则。

2. paths中的字段会被以变量的方式在被使用的地方替换,然后再解析。

比如:

代码如下://代码块(1)

//path定义:

seajs.config({

base:"./app/src",

path:{

"a":"../lib", //(1) 相对路径

"lib":"path/to/lib", //(2) 顶级标识

"l2":"/lib" //(3) 根路径

}

});

//模块 mod/m/m.js:

...

require("a/jquery");

//=> 转换为:"../../lib/jquery"

//=> 加载:mod/lib/jquery (特别注意 1)

...

//模块 mod/f.js:

...

require("a/jquery");

//=> 转换为:"../../lib/jquery"

//=> 加载:lib/jquery (特别注意 2)

...

alias 中路径解析规则

(第 2 层,本身的路径可以依赖于paths的设置)

1. alias 的规则类似于 paths,并且 alias 路径也可以使用 paths 中的“变量”

2. 提醒:paths、alias 中尽量使用【顶级标识】、【根路径】、【绝对路径】,不要使用【相对标识】,因为在不同深度的模块引用时会解析为不同的路径。

3. 【相对标识】:在哪里被引用,相对的解析位置视被引用的地方而定,遵循当地的规则。

seajs.use 路径解析规则

【相对标识】:相对于 当前页面 解析。

define 定义模块 ID 解析规则 (1)

(第 3 层,路径可以相对于 alias 或 paths 来设置)

可以使用:【相对标识】、【顶级标识】、【根路径】

推荐使用【顶级标识】,如果模块的位置不在 base 基础路径内,则使用【相对标识】或【根路径】。

【相对标识】:相对 当前页面 解析

代码如下:// 代码块(2)

//config -- 还使用 [代码块 (1)]中的配置

// 模块1,无歧义,根路径解析

define("/app/src/module/Base", ..);

// 模块2,无歧义,顶级标识,相对于 base 基础路径来解析

define("app/src/module/Base", ..);

// 模块3,有歧义,相对标识,此处相对于 当前页面(引用到这个模块的html页面)

// 但其他地方即便使用 【表面上相同的“ID”】,也可能会被解析不同的模块

define("./app/src/module/Base",..);

模块依赖ID 解析规则 (2)

(第 3 层,路径可以相对于 alias 或 paths 来设置)

seajs define 详解 seajs中模块的解析规则详解和模块使用总结

【相对标识】:相对 base 基础路径解析

代码如下://代码块(3)

//config -- 还使用 [代码块 (1)]中的配置

//无歧义,相对于根路径解析

define("..", ["/app/src/module/Base"], ..)

// 无歧义,顶级标识,相对于 base 基础路径解析

define("..", ["app/src/module/Base"], ..)

//有歧义,相对标识,此处相对于 当前模块 来解析

//此处的依赖看起来是依赖于【代码块(2)】中的 `模块3`

//但如果当前模块跟当前页面不在同一层目录下,就不会被解析为 `模块3`

define("..", ["./app/src/module/Base"],..)

模块内 require 其他模块的ID 解析规则 (3)

(第 3 层,路径可以相对于 alias 或 paths 来设置)

【相对标识】:相对 base 基础路径解析

代码如下://代码块(4)

//config -- 还使用 [代码块 (1)]中的配置

define("..", [..], function(require){

//无歧义,相对于根路径解析

require("/app/src/module/Base");

});

define("..", [..], function(require){

// 无歧义,顶级标识,相对于 base 基础路径解析

require("app/src/module/Base");

});

define("..", [..], function(require){

//有歧义,相对标识,此处相对于 当前模块 来解析

//此处的依赖看起来是依赖于【代码块(2)】中的 `模块3`

//但如果当前模块跟当前页面不在同一层目录下,就不会被解析为 `模块3`

require("./app/src/module/Base");

})

特别提醒:模块内三处需要写ID的地方,不需要使用看起来相同的字符串,只要被解析为相同的模块即可。

总结:

1.paths 和 alias 的设置仅仅相当于一个变量,在哪里使用,就在那里替换为设定的值,然后再解析。

2.尽可能的使用【顶级标识】。

3.如果不能使用【顶级标识】,比如目录跨越比较大等,则尽量设置 alias 或 paths 通过一个【非相对路径】 标识 定位到一个目录,然后在这个标识下,再定义ID。

  

爱华网本文地址 » http://www.413yy.cn/a/8105050103/322517.html

更多阅读

继续重复过去23年的游戏规则 动词过去式变化规则

//@但斌:救市真家伙出来了,股市又该暴涨了!全部股票涨停,妖魔鬼怪得救了!继续重复过去23年的游戏规则//@永恒的股票王:是的!垃圾股又要群魔乱舞//@但斌:估计空头又睡不着觉了直接爆仓!//@陈勇NINGBO:解套了都会买茅台酒庆祝的//@但斌://

淘宝规则中规定的违规行为有几大类 淘宝宝贝标题违规规则

淘宝规则中规定的违规行为有几大类,淘宝规则的违规积分如何清零,淘宝规则的适用者是,淘宝规则变更时不会以哪种方式通知淘宝如何刷信誉 淘宝规则淘宝刷客必看淘宝信誉规则《淘宝规则》 淘宝如何刷信誉淘宝怎么刷钻钻精简版淘宝规则淘宝

女子被中介要求潜规则 招聘中的潜规则

招聘中的潜规则作者/石才员隐藏在企业招聘广告中的潜规则企业要招人,势必就要用文字去描述自己所招聘职位的具体要求。干过招聘的都知道,一个完整的招聘职位描述必须包含两部分:职位工作职责和职位任职要求。而岗位的工作职责又来

保险行业潜规则 解析行业和企业内的潜规则

 潜规则就如它字面的意义一般,你只有“潜”到一定的地步,才能发现其中的规则。但随着信息化的到来,越来越多的潜规则开始浮出水面,昭然于世。大事为门,当有一些潜规则被揭露时,各种各样的“门”也孕育而生,艳照门,日记门等在当时都引起轩

圈人圈钱:互联网中的潜规则

 每个行业都有各自的潜规则,而互联网行业各种各样的潜规则更是数不胜数,但归根结底可以总结为两类:圈人和圈钱。   制造用户的把戏  和传统的商业运作不同,对于互联网来说,商业模式也许不是最重要的,最重要的是圈人,因为能圈人就能

声明:《seajs define 详解 seajs中模块的解析规则详解和模块使用总结》为网友饮孤酒分享!如侵犯到您的合法权益请联系我们删除