Chen Yangjian's Blog

Carpe diem - Seize the day

近期遇到的一些 Bug 汇总

| Comments

项目里头,用户保存一份设计的时候,会合并多份 JavaScript 文件。这些文件都是 seajs 模块,过程中,会根据模块中声明的依赖关系,自动添加相应的文件到合并的文件中去。依赖声明的形式是数组,类似:

define('foo', ['a','b','c'], function(require, export){});

代码实现得很容易,之前也一直没有问题。然而最近一个模块因为依赖太多,出了麻烦。那个模块被 Closure Compiler 压缩之后,成了这个样子:

define("foo","a,b,c".split(","), function(require, export){});

之前根据 [] 寻找依赖数组的,就挂掉了。Closure Compiler 这里的压缩策略是,如果用 “,”.split(“,”) 这种,能够比之前的语句压缩后要短,就改成这种。算是一个 gotcha,记在这里。

另一个问题,是略有些粗苯的,代码如下:

wrong.js
1
2
3
4
5
define('a', ['b'], function(require,exports){});
seajs.use(['a'], function(a) {
    document.write('');
    a.foo();
});

结果 document.write 锁住了 DOM 树,seajs 在尝试解决 a 模块的依赖,在 head 中加入 的时候卡住了。比较奇怪的是,即使调用了 document.close(); 也不行。下次 debugger 看一下⋯⋯

Comments