我觉得我发现了不编译问题的根本原因。。。
我自己写了个监视asset目录的脚本:
// watch.js
var fs = require("fs");
fs.watch("c:/path/to/project/assets/",
{recursive: true},
function(eventType, filename) {
console.log(eventType, filename);
});
这样我改变代码文件的时候,会打印出事件和文件名:
然后我发现,在保存修改的代码后,只要我在node打印出修改事件之前切回Creator,一定不编译;而在打印出修改事件之后切回Creator,一定编译。所以我之前遇到的不编译的问题,在于我按Ctrl+S后切回Creator速度太快了。其他朋友直接保存JS代码,如果系统不卡的话,速度非常快,切回Creator时基本上已经保存完了;而我使用TypeScript,保存后它需要1~2秒左右才把JS代码保存到assets下,如果在这之前我切回Creator,就不编译了。
为了验证这一问题,我又写了个nodejs脚本,每秒往assets/test.js写一个新数字:
// write.js
var fs = require("fs");
var k = 0, fd;
setInterval(() => {
fd = fs.openSync("c:/path/to/project/assets/test.js", "w");
fs.writeSync(fd, k++);
fs.closeSync(fd);
}, 1000);
运行之后立刻切回Creator,可以在内置编辑器里看到test.js的内容每秒在变化,但是Creator没有动静,不编译。
综上,这个问题的根本原因是,Creator在前台时停止或者不响应js代码的watch事件?