seajs 的配置还是很简单的, 总共就那么几个, 用下面一段代码来说明每项配置大概的作用吧。
//config.js ;(function(){ var root = '../static/js/'; var version = '1.0'; seajs.config({ //模块系统的基础路径 base: '../static/js/', //别名 alias: { 'jquery': 'jquery/jquery-1.7.2.min' , 'jquery-plug': 'jquery/plugs/' }, //预加载 preload: [ window.$ || window.jQuery ? '' :'jquery' ], //错误信息查看 debug: 1, //文件映射 map: [ //可配置版本号 ['.css', '.css?v=' + version], ['.js', '.js?v=' + version] ], //编码 charset: 'utf-8' }); })();
base:
base 有一个默认的值, 它是 sea.js 在你项目中的位置,也就是说在默认情况下,所有模块都是相对 sea.js 的路径来解析的。
当设置了 base 后,你 require 或者 require.async 一个模块的时候,如果是采用顶级标识(不以 . 和 / 开头)来载入,那么 base 设定的路径将对模块起作用,而以 . 和 / 开头载入的模块,读取的模块是以相对当前模块的路径来解析。注意: base 还会对 alias 配置项起作用,这一点作者并没有提到。
alias:
别名,很好理解。有时候项目比较大,各模块间划分比较细,目录文件比较多、深,这个时候可以给某一个模块或者一组模块起一个别名,用来简化模块的标识,同时也方便模块的迁移。
preload:
preload 是配置需要提前加载并初始化的模块,或者预加载的文件。 根据作者的原话,提前加载的模块,在 use 的时候才加载,但是本人测试的时候,只是建立 config 文件后并没有 use 模块,但是在控制面板里 preload 设置的模块和文件均会发送请求并加载,不知是否后续版本有变动。
还有一点要注意,在 preload 文件的时候(特别是像 jq 库)要考虑其他文件内容对 preload 的文件的依赖。比如,preload 里预加载 jq 库文件(注意是库文件,不是改动后的 jq 模块),然后某一个模块里 require(‘jqeury-plug/fancybox/jquery.fancybox-1.3.4.pack’) 这个时候,需要考虑解析和加载的问题了,由于在本地速度相当快,有的时候就是 fancybox 加载好了开始执行的时候 jq 库文件确还没加载好,结果就导致错误出现了。关于使用 jq 模块和 jq 库的问题后面再讨论。
debug:
debug 有3个值可选,0|1|2
0: 普通状态,你就当啥也没发生
1: 调试状态,combo 会失效,其他和 0 的时候一样
2: 无缓存状态,所有请求都会自动在后面添加一个时间戳,其他和 1 的时候一样
值为 2 的时候在 2.0.0 里并没有表现出来,不知神马情况。
charset:
这个没啥好说,你懂的。
map:
简单的说是文件映射,但是它实际上的作用一句两句说不完。
在上面 config.js 里做的映射起作用就是控制版本号,而除了这个功能外,在开启 ?seajs-debug 状态下 map 将发挥更大的作用,具体可以参看 这里