Change fileWatcher in sys for node 4

This commit is contained in:
zhengbli 2015-10-01 15:25:43 -07:00
parent a6ba6fa10a
commit 0bc5c14d51

View file

@ -9,6 +9,7 @@ namespace ts {
readFile(path: string, encoding?: string): string;
writeFile(path: string, data: string, writeByteOrderMark?: boolean): void;
watchFile?(path: string, callback: (path: string) => void): FileWatcher;
watchDirectory?(path: string, callback: (path: string) => void): FileWatcher;
resolvePath(path: string): string;
fileExists(path: string): boolean;
directoryExists(path: string): boolean;
@ -191,6 +192,12 @@ namespace ts {
const _fs = require("fs");
const _path = require("path");
const _os = require("os");
const _process = require("process");
function isNode4OrLater(): Boolean {
return parseInt(_process.version.charAt(1)) >= 4;
}
const platform: string = _os.platform();
// win32\win64 are case insensitive platforms, MacOS (darwin) by default is also case insensitive
@ -284,6 +291,15 @@ namespace ts {
readFile,
writeFile,
watchFile: (fileName, callback) => {
// Node 4.0 stablized the `fs.watch` function which avoids polling
// and is more efficient than `fs.watchFile` (ref: https://github.com/nodejs/node/pull/2649
// and https://github.com/Microsoft/TypeScript/issues/4643), therefore
// if the current node.js version is newer than 4, use `fs.watch` instead.
if (isNode4OrLater()) {
return _fs.watch(fileName, (eventName: string, path: string) => callback(path));
}
// watchFile polls a file every 250ms, picking up file notifications.
_fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged);