-
Notifications
You must be signed in to change notification settings - Fork 2.6k
模块标识 #258
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
有任何问题,欢迎留言交流。 |
关于手动指定ID和依赖,或者后期自动化构建为transport结构,都需要更为清晰的了解ID的解析模式,这里的介绍还没有面面俱到。这篇文章算是一个补充吧:seajs中模块ID注意事项,模块定义、模块加载、模块依赖的ID路径解析规则 |
@peichao01 非常感谢补充,很详尽的说明。 |
nice! |
在“自动添加规则”这一部分, |
路径解析中的paths参数
|
seajs.use 中的相对路径始终相对当前页面来解析。 应该是相对于sea.js的地址吧, |
学习了,非常感谢 |
在引入css文件的时候,貌似必须添加后缀的吧。在script里面引入css的时候就回找不到,在define里面引入css 的时候会自动添加上.js的后缀引入导致找不到。 |
同问,在“自动添加规则”这一部分, |
感谢分享 |
总结下: |
模块标识
模块标识是一个字符串,用来标识模块。在
require
、require.async
等加载函数中,第一个参数都是模块标识。Sea.js 中的模块标识是 CommonJS 模块标识 的超集:
/
)分隔的多项组成。.
或..
。.js
。.
或..
,则该模块标识是相对标识。require
所在模块的路径来解析。注意,符合上述规范的标识肯定是 Sea.js 的模块标识,但 Sea.js 能识别的模块标识不需要完全符合以上规范。 比如,除了大小写字母组成的小驼峰字符串,Sea.js 的模块标识字符串还可以包含下划线(
_
)和连字符(-
), 甚至可以是http://
、https://
、file:///
等协议开头的绝对路径。相对标识
相对标识以
.
开头,只出现在模块环境中(define
的factory
方法里面)。相对标识永远相对当前模块的 URI 来解析:顶级标识
顶级标识不以点(
.
)或斜线(/
)开始, 会相对模块系统的基础路径(即 Sea.js 的base
路径)来解析:模块系统的基础路径即
base
的默认值,与sea.js
的访问路径相关:当
sea.js
的访问路径中含有版本号时,base
不会包含seajs/x.y.z
字串。 当sea.js
有多个版本时,这样会很方便。当然,也可以手工配置
base
路径:普通路径
除了相对和顶级标识之外的标识都是普通路径。普通路径的解析规则,和 HTML 代码中的
<script src="..."></script>
一样,会相对当前页面解析。提示:
base
基础路径解析。require
和require.async
中的相对路径相对当前模块路径来解析。seajs.use
中的相对路径始终相对当前页面来解析。文件后缀的自动添加规则
Sea.js 在解析模块标识时, 除非在路径中有问号(
?
)或最后一个字符是井号(#
),否则都会自动添加 JS 扩展名(.js
)。如果不想自动添加扩展名,可以在路径末尾加上井号(#
)。设计原则
模块标识的规则就上面这些,设计的核心出发点是:
a.js
时,如果需要引用b.js
,则只需要知道b.js
相对a.js
的相对路径即可,无需关注其他。/xx/zz
)、绝对路径、以及传给use
方法的非顶级标识,都是相对所在页面的 URL 进行解析。一旦理解了以上两点,一切都会很自然、很简单。不必刻意去记这些规则,多写写,自然就会。
The text was updated successfully, but these errors were encountered: