diff --git a/lib/fs_utils/file_list.js b/lib/fs_utils/file_list.js
index <HASH>..<HASH> 100644
--- a/lib/fs_utils/file_list.js
+++ b/lib/fs_utils/file_list.js
@@ -40,6 +40,7 @@ class FileList extends EventEmitter {
     this.files = new Map();
     this.staticFiles = new Map();
     this.assets = [];
+    this.reading = new Map();
     this.compiling = new Set();
     this.copying = new Set();
     this.compiled = new Set();
@@ -86,7 +87,7 @@ class FileList extends EventEmitter {
   }
 
   get hasPendingFiles() {
-    return !!(this.compiling.size || this.copying.size);
+    return !!(this.reading.size || this.compiling.size || this.copying.size);
   }
 
   resetTimer() {
@@ -211,8 +212,13 @@ class FileList extends EventEmitter {
     }
 
     debug(`Reading ${path}`);
+    // TODO: What if it's in reading already?
+    const readDate = Date.now();
+    this.reading.set(path, readDate);
     readFileAndCache(path).then(() => {
-      if (this.disposed) return;
+      const cachedDate = this.reading.get(path);
+      if (this.disposed || !cachedDate || cachedDate > readDate) return;
+      this.reading.delete(path);
       // .json files from node_modules should always be compiled
       if (!isAsset && !ignored && (compiler && compiler.length) || deppack.isNpmJSON(path)) {
         const sourceFile = this.find(path) ||
FileList: track files which are being read. Closes gh-<I>.