Вы захотите использовать массив process.argv
для доступа к аргументам командной строки, чтобы получить имя файла, и модуль FileSystem (fs) для чтения файла. Например:
// Make sure we got a filename on the command line.
if (process.argv.length < 3) {
console.log('Usage: node ' + process.argv[1] + ' FILENAME');
process.exit(1);
}
// Read the file and print its contents.
var fs = require('fs')
, filename = process.argv[2];
fs.readFile(filename, 'utf8', function(err, data) {
if (err) throw err;
console.log('OK: ' + filename);
console.log(data)
});
Чтобы немного разбить это для вас, process.argv
обычно будет иметь длину два, нулевой элемент - интерпретатор "узла", а первый - скрипт, который в данный момент выполняется узлом, элементы после которого были переданы в командной строке. , После того, как вы извлекли имя файла из argv, вы можете использовать функции файловой системы, чтобы прочитать файл и делать с его содержимым все, что вы хотите. Пример использования будет выглядеть так:
$ node ./cat.js file.txt
OK: file.txt
This is file.txt!
[Edit] Как упоминает @wtfcoder, использование метода "fs.readFile()
" может быть не самой лучшей идеей, поскольку он буферизует все содержимое файла перед передачей его в функцию обратного вызова. Эта буферизация может потенциально использовать много памяти, но, что более важно, она не использует одну из основных функций node.js - асинхронный, четный ввод-вывод.
«Узловой» способ обработки большого файла (или любого другого файла на самом деле) заключается в использовании fs.read()
и обработке каждого доступного фрагмента так, как он доступен из операционной системы. Однако чтение файла как такового требует от вас собственного (возможно) инкрементального синтаксического анализа / обработки файла, и некоторая степень буферизации может быть неизбежной.