Я понимаю, что эта проблема довольно старая, но я хотел опубликовать комментарий для тех, у кого могут быть подобные проблемы.
Я наткнулся на ту же ошибку и не смог найти много помощи. Итак, я подумал, что вместо того, чтобы нацеливать CSS, я попытаюсь настроить таргетинг на xpath. Я не знаю, что такое лучшая практика.
Мои исходные функции отлично работали на Ubuntu 16, R 3.4.0. Однако они не справились с Debian 8 R 3.3.3 и R 3.4.0.
Когда я изменил свой код на целевые xpaths вместо css, они начали работать как ожидалось. Например, изменив это ...
contents <- link %>%
xml2::read_html() %>%
rvest::html_nodes(css = "pre") %>%
rvest::html_text()
на это ...
contents <- link %>%
xml2::read_html() %>%
rvest::html_nodes(xpath = "//pre") %>%
rvest::html_text()
разрешил мою проблему.
Gulp сам по себе не переупорядочивает то, что происходит при последующих вызовах .pipe
. Я не уверен, что именно происходит в вашем случае, но ваш код излишне хрупок .
Рассмотрим этот шаблон:
gulp.src("...")
.pipe(pluginA)
.pipe(pluginB)
И предположим, что pluginA
просто печатает на консоль pluginA
, а pluginB
просто печатает на консоль pluginB
. Вы можете подумать, что результат будет:
pluginA
pluginB
pluginA
pluginB
pluginA
...
Другими словами, каждый файл будет проходить через pluginA
, а затем этот файл будет проходить через pluginB
, затем следующий файл будет проходить через pluginA
] и т. д. То есть pluginA
не увидит новый файл, пока pluginB
не обработает предыдущий файл, который pluginA
завершил обработку. Хотя бывают случаи, когда именно этот порядок и происходит, для общего случая этот порядок не гарантируется . Вы также можете иметь:
pluginA
pluginA
pluginA
pluginB
pluginA
pluginB
pluginB
pluginB
pluginA
...
Файлы должны быть просмотрены сначала pluginA
, но нет гарантии, что pluginB
обработает файл до того, как pluginA
перейдет к следующему файлу. [ 1129]
Ваш код работает нормально, если порядок обработки оказывается полностью чередующимся, как в первом примере, который я привел выше. Но в целом этот порядок не гарантируется, и ваш код не будет работать.
Так получилось, что хрупкая часть вашего кода не нужна . Нет необходимости записывать путь к файлу в переменной вне потока файлов, а затем читать его в более поздней части потока. gulp-if
передаст проверяемый файл в состояние, которое вы ему передаете. Вот пример:
const gulp = require("gulp");
const gulpIf = require("gulp-if");
gulp.task("default", () =>
gulp.src("src/**")
.pipe(gulpIf((file) => {
console.log(file.path);
return file.basename === "a";
}, gulp.dest("out"))));
Эта задача поместит в подкаталог out
все файлы с базовым именем "a"
. Вы также увидите на консоли абсолютный путь к каждому файлу, который проходит через условие, заданное в gulpIf
.
Вы можете изменить fileShouldBePreprocessedBySass
так, чтобы он принимал файл винила, и просто отметьте там file.path
вместо его сохранения и последующего извлечения.