createReadStream не хранит в памяти весь файл. Первые две ошибки памяти возникли из-за помещения каждого имени в массив имен (v8 допускает выделение только определенного количества памяти).

Посмотрите код ниже:

Чтобы обработать файл, запустите это в терминале: cat itcont.txt | node parseLargeFile.js.

Также обратите внимание на Through2, это отличная библиотека для создания потоков преобразования, которые в основном представляют собой потоки с возможностью чтения и записи, которые можно использовать для управления входными потоками. Вы также можете использовать stream.Transform аналогичным образом.

Еще одна действительно интересная вещь заключается в том, что вы можете просто cat <filename> | node parseLargeFile.js напрямую манипулировать файлом без необходимости писать код чтения файловой системы. Потоки NodeJS совместимы с потоками stdin и stdout, поэтому вы также можете передавать все с процессами Unix 🎉

На NodeSchool.io есть действительно хорошее введение в стримы.