问题描述:
之前使用seajs 1.x的时候,大量的使用到了如下写法:
define(['a.js,b.js'],function(){})
使用起来是没问题的,因为源码里的define是有考虑到的(以下摘自1.3的seajs代码片段):
if (arguments.length === 1) {
factory = id;
id = '';
}
// define([], factory)
else if (util.isArray(id)) {
factory = deps;
deps = id;
id = '';
}
// parse deps
if (!util.isArray(deps) && util.isFunction(factory)) {
deps = parseDependencies(factory.toString());
}
升级到2.0之后,之前的js全部报错了,定位到是define出了问题,2.0的define做了一些修改,如下(以下摘自2.0的seajs-debug代码片段):
function define(id, deps, factory) {
// define(factory)
if (arguments.length === 1) {
factory = id
id = undefined
}
// Parse dependencies according to the module factory code
if (!isArray(deps) && isFunction(factory)) {
deps = parseDependencies(factory.toString())
}
从代码上看,2.0之后定义define(['a.js,b.js'],function(){})这种形式的话,参数id变成了数组,deps就变成function了,导致后面解析有问题。
目前解决办法是补齐所有参数,这样OK。但是我之前项目所有js都需要更新一次。
考虑seajs升级之后应该也能兼容以前的情况,希望作者考虑一下是否增加以前对参数的判断,保证向前兼容。
或者是我理解不到位,还望作者多多指教