新普京网站-澳门新普京 > 新普京网站 > seajs中模块的解析规则详解和模块使用总结_Seajs_脚本之家

seajs中模块的解析规则详解和模块使用总结_Seajs_脚本之家

2019/12/30 00:51

需要写模块ID的地方有三处:复制代码 代码如下:define"], function(require, exports, module){ var moduleA = require注意:无论是define第一个参数还是,最终的比对标准是。因此,这三处需要写ID 的地方可以以任意一种方式来写,只要最终解析为同一个URI,即被认为是同一个模块。在解析ID的过程中,会预先经过 seajs.config 中定义的 alias 和 paths 的处理。

define("..", [..], function{ // 无歧义,顶级标识,相对于 base 基础路径解析 require("app/src/module/Base");});

模块依赖ID 解析规则

base 路径解析规则1. 不可使用,因为顶级标识就是相对于 base 基础路径来解析的,因此 base 本身只能使用等。2. base 默认路径为 seajs 的目录,其他情况参见seajs官网,如果不是seajs推荐的源码目录结构,尽量手动设置 base 路径。3. :相对于 当前页面 解析。paths 中路径解析规则1. :在哪里被引用,相对的解析位置视被引用的地方而定,遵循当地的规则。2. paths中的字段会被以变量的方式在被使用的地方替换,然后再解析。比如:复制代码 代码如下://代码块//path定义:seajs.config({ base:"./app/src", path:{ "a":"../lib", // 相对路径 "lib":"path/to/lib", // 顶级标识 "l2":"/lib" //;//模块 mod/m/m.js: ...require;//=> 转换为:"../../lib/jquery"//=> 加载:mod/lib/jquery ...//模块 mod/f.js:...require;//=> 转换为:"../../lib/jquery"//=> 加载:lib/jquery ...alias 中路径解析规则(第 2 层,本身的路径可以依赖于paths的设置)1. alias 的规则类似于 paths,并且 alias 路径也可以使用 paths 中的“变量”2. 提醒:paths、alias 中尽量使用,不要使用,因为在不同深度的模块引用时会解析为不同的路径。3. :在哪里被引用,相对的解析位置视被引用的地方而定,遵循当地的规则。seajs.use 路径解析规则:相对于 当前页面 解析。define 定义模块 ID 解析规则

(第 3 层,路径可以相对于 alias 或 paths 来设置)可以使用:推荐使用,如果模块的位置不在 base 基础路径内,则使用:相对 当前页面 解析复制代码 代码如下:// 代码块//config -- 还使用 [代码块 ]中的配置

复制代码 代码如下://代码块//config -- 还使用 [代码块 ]中的配置

define("..", [..], function{ //有歧义,相对标识,此处相对于 当前模块 来解析 //此处的依赖看起来是依赖于中的 `模块3` //但如果当前模块跟当前页面不在同一层目录下,就不会被解析为 `模块3` require("./app/src/module/Base");})特别提醒:模块内三处需要写ID的地方,不需要使用看起来相同的字符串,只要被解析为相同的模块即可。

总结:1.paths 和 alias 的设置仅仅相当于一个变量,在哪里使用,就在那里替换为设定的值,然后再解析。2.尽可能的使用,比如目录跨越比较大等,则尽量设置 alias 或 paths 通过一个 标识 定位到一个目录,然后在这个标识下,再定义ID。

seajs中,模块的ID大致可分为三种:,普通路径包括 “绝对路径”、“根路径”,等。

(第 3 层,路径可以相对于 alias 或 paths 来设置):相对 base 基础路径解析复制代码 代码如下://代码块//config -- 还使用 [代码块 ]中的配置

define("..", [..], function{ //无歧义,相对于根路径解析 require("/app/src/module/Base");});

seajs github 模块标识已经说的相对清楚了。但并没有面面俱到,特别是当你需要手写 的时候,或者自己写自动化工具来做 transport 的时候(ps:spm貌似适应性不是很强也不易用,毕竟每个项目的目录结构可能相差很大,且不易改变。当然如果他的定位是包管理工具就别指望它来做你的项目的自动化构建工具了),ID的解析规则就需要了解透彻了。注意事项:1. 顶级标识始终相对 base 基础路径解析。2. 绝对路径和根路径始终相对当前页面解析。3. require 和 require.async 中的相对路径相对当前模块路径来解析。4. seajs.use 中的相对路径始终相对当前页面来解析。

这里重点说明 。相对标识 是指 "./","../" 开头的,如:"./OtherModule", "../lib/Base"。顶级标识 是指 以文件或目录开头的,如:"app/widget/Select"

// 模块1,无歧义,根路径解析define("/app/src/module/Base", ..);// 模块2,无歧义,顶级标识,相对于 base 基础路径来解析define("app/src/module/Base", ..);// 模块3,有歧义,相对标识,此处相对于 当前页面// 但其他地方即便使用 ,也可能会被解析不同的模块define("./app/src/module/Base",..);

//无歧义,相对于根路径解析define("..", ["/app/src/module/Base"], ..)// 无歧义,顶级标识,相对于 base 基础路径解析define("..", ["app/src/module/Base"], ..)//有歧义,相对标识,此处相对于 当前模块 来解析//此处的依赖看起来是依赖于中的 `模块3`//但如果当前模块跟当前页面不在同一层目录下,就不会被解析为 `模块3`define("..", ["./app/src/module/Base"],..)模块内 require 其他模块的ID 解析规则 (第 3 层,路径可以相对于 alias 或 paths 来设置):相对 base 基础路径解析

上一篇:jquery获取页面元素位置实例 下一篇:利用Keydown事件阻止用户输入实现代码_javascript技巧_脚本之家