Почему этот вызов fs.writeFile не работает? Я использую Linux Ubuntu. Вызов находится в самом конце этой задачи gulp, где я пытаюсь записать строку, правильность которой я проверил, поверх файла. Код [ключа] манифеста возвращает правильное имя файла. Это должно работать, если я не упускаю что-то глупое. Пожалуйста помоги! Вызов writefile не показывает ошибки. Но файл не перезаписывается.
gulp.task('injecttags', function() {
const manifest = jsonfile.readFileSync('./public/manifest/manifest.json');
const htmlkeys = [];
Object.keys(manifest).forEach((key) => {
if (key.endsWith('.html')) {
htmlkeys.push(key);
}
});
htmlkeys.forEach((key) => {
console.info("For key:", key);
let file_content = fs.readFileSync('./public/html/'+manifest[key]).toString();
console.info(file_content);
let position = 0;
while (((position = file_content.indexOf('<!-- INSERTSCRIPT=', position)) !== -1)) {
const actualpositiontowriteto = file_content.indexOf('\n', position);
const openquotepos = file_content.indexOf("'", position) + 1;
const closequotepos = file_content.indexOf("'", openquotepos);
const keystr = file_content.substring(openquotepos, closequotepos);
const toinsert = `<script src = "${manifest[keystr]}"></script>\n`;
const beg = file_content.substr(0, position);
const end = file_content.substr(actualpositiontowriteto);
file_content = beg + toinsert + end;
}
position = 0;
while (((position = file_content.indexOf('<!-- INSERTCSS=', position)) !== -1)) {
const actualpositiontowriteto = file_content.indexOf('\n', position);
const openquotepos = file_content.indexOf("'", position) + 1;
const closequotepos = file_content.indexOf("'", openquotepos);
const keystr = file_content.substring(openquotepos, closequotepos);
const toinsert = `<link rel = "stylesheet" href = "${manifest[keystr]}">\n`;
const beg = file_content.substr(0, position);
const end = file_content.substr(actualpositiontowriteto);
file_content = beg + toinsert + end;
}
fs.writeFile('./public/html/'+manifest[key], file_content, (err) => {
if (err) return console.info('error writing file!', err);
return console.info('successful file write');
});
});
});
Да, я просто просматриваю файл в текстовом редакторе после выполнения задачи. Кажется, это тот же самый файл, что и до записи. Как я уже говорил, я подтвердил, что различные входные данные, такие как manifest [key], верны. Вызывает недоумение то, что Node говорит, что запись была без ошибок, но я не вижу записи.
Тогда файл, который он записывает, вероятно, находится не в том месте, на которое вы смотрите. fs.writeFile() не лжет. Если он не сообщает об ошибке, и вы уверены, что ждете, пока это будет сделано, то он будет писать успешно. Так что, возможно, ./public/html/'+manifest[key] не совсем там, где вы думаете.
Я был на версии 9.x.x Node, теперь я перешел на 8.11.1, и это то же самое.
Иногда он явно записывал в файл, о котором идет речь, иногда нет. Когда я плохо зацикливал, я получал много правильных записей, но неправильный вывод. Я исправил цикл, и теперь вообще нет записи. Это так странно, смеется.
Бут просто убрать Node и Gulp ... Честно говоря, я не виноват. Судя по всему, секвенсор для Gulp, который я использую, - это всего лишь хитрость, но это лучшее, что я могу найти ...
Что лучше всего подходит для системы сборки веб-разработчиков в настоящее время? У Webpack и Gulp есть проблемы. Хотел бы получить ответ на этот вопрос.





«Не работает» - не очень хорошее описание проблемы. Что ты видишь в консоли? Вы ждете завершения записи, прежде чем пытаться использовать ее результаты. Какую отладку вы сделали? Что вы узнали во время отладки?