Я пытаюсь написать препроцессор уценки, который может включать в вывод другие файлы.
К сожалению, я обнаружил, что "метод паузы не останавливает события очереди в очереди".
Решение, которое я написал, закончило чтение и запись исходного файла, а затем добавило другие файлы в конце:
import { createInterface } from "readline";
import * as fs from "fs";
import * as path from "path";
import minimist from "minimist";
const argv = minimist(process.argv.slice(2));
const inputFile = path.resolve(argv._[0]);
const outputFile = path.resolve(argv._[1]);
const inputFileReadStream = createInterface({
"input": fs.createReadStream(inputFile)
});
const writeStream = fs.createWriteStream(outputFile);
readStream.on("line", function readLine(line) {
if (line.startsWith("@import") === true) {
inputFileReadStream.pause();
console.log(line.substring(line.indexOf("\"") + 1, line.lastIndexOf("\"")));
const readStream = createInterface({
"input": fs.createReadStream(path.resolve(path.dirname(inputFile), line.substring(line.indexOf("\"") + 1, line.lastIndexOf("\""))))
});
readStream.on("line", function(line) {
readLine(line);
});
readStream.on("end", function() {
inputFileReadStream.resume();
});
} else {
writeStream.write(line + "\n");
}
});
Поэтому я попытался изменить его наиспользуйте библиотеку line-by-line
, упомянутую в посте, на который я ссылался, чтобы посмотреть, сработает ли это:
let readStream = new (require("line-by-line"))(fs.createReadStream(inputFile));
const writeStream = fs.createWriteStream(outputFile);
readStream.on("line", function readLine(line) {
if (line.startsWith("@import") === true) {
const tempStream = readStream;
tempStream.pause();
console.log(line.substring(line.indexOf("\"") + 1, line.lastIndexOf("\"")));
readStream = new (require("line-by-line"))(fs.createReadStream(path.resolve(path.dirname(inputFile), line.substring(line.indexOf("\"") + 1, line.lastIndexOf("\"")))));
readStream.on("line", function(line) {
readLine(line);
});
readStream.on("end", function() {
tempStream.resume();
});
} else {
writeStream.write(line + "\n");
}
});
Но это привело к созданию файла, который постепенно чередовал строки из импортированных файлов восновной файл.
У меня вопрос: есть ли способ заставить readline
правильно реагировать на pause
события?
Можно ли это исправить с помощью Transform
?
Вот ссылка на репозиторий, если это поможет: https://github.com/brianjenkins94/Rosettas-Node