In the below code, fileShouldBePreprocessedBySass()
will be called before console.log('intercepted!');
execution. Also, in fileShouldBePreprocessedBySass(targetFileAbsolutePath)
, parameter targetFileAbsolutePath
will be undefined
:
let currentSourceFileAbsolutePath;
return gulp.src(entryPointsSourceFilesPathsOrGlobs)
// "gulpPlugins.intercept" is "gulp-intercept"
.pipe(gulpPlugins.intercept( sourceVynilFile => {
console.log('intercepted!');
currentSourceFileAbsolutePath = sourceVynilFile.path;
console.log(currentSourceFileAbsolutePath); // OK here
return sourceVynilFile;
}))
// "gulpPlugins.if" is "gulp-if"
.pipe(gulpPlugins.if(
// currentSourceFileAbsolutePath is undefined !!!
fileShouldBePreprocessedBySass(currentSourceFileAbsolutePath),
gulpPlugins.sass()
));
// ...
fileShouldBePreprocessedBySass(targetFileAbsolutePath) {
console.warn('---');
console.warn(targetFileAbsolutePath); // undefined!
const targetFilenameExtension = Path.extname(targetFileAbsolutePath);
let targetFilenameExtensionIsSupportedBySassPreprocessor = false;
for (const filenameExtension of SUPPORTED_FILENAME_EXTENSIONS__SASS_PREPROCESSOR) {
if (filenameExtension === targetFilenameExtension) {
targetFilenameExtensionIsSupportedBySassPreprocessor = true;
break;
}
}
return targetFilenameExtensionIsSupportedBySassPreprocessor;
}
Really, original code written in TypeScript, but I rewrite it to JavaScript to allow more people to understand the code. I said about it because TypeScript compiler somehow understood, what in pipe(gulpPlugins.if(/*...*/))
, parameter currentSourceFileAbsolutePath
is not initialized, so TS2454: Variable 'currentSourceFileAbsolutePath' is used before being assigned.
error occurred.
I am confused because I have similar task which works without error (in right sequence):
let currentSourceFileAbsolutePath: string;
return gulp.src(entryPointsSourceFilesPathsOrGlobs)
.pipe(gulpPlugins.intercept(sourceVynilFile => {
currentSourceFileAbsolutePath = sourceVynilFile.path;
return sourceFile;
}))
.pipe(gulpPlugins.pug())
.pipe(gulpPlugins.intercept(compiledHtmlFile => {
// currentSourceFileAbsolutePath is NOT undefined!
if (shouldValidateCompiledHtmlRespectiveToSourceFile(currentSourceFileAbsolutePath)) {
HtmlValidator.validateHtml(compiledHtmlFile);
}
return compiledHtmlFile;
}))
.pipe(gulp.dest(() => (
// currentSourceFileAbsolutePath is NOT undefined!
getOutputDirectoryForPreprocessedMarkupEntryPointFileByRespectiveSourceFile(currentSourceFileAbsolutePath)
)));
What wrong in the first task? I missed some async call?
from Node.js & Gulp: Real piping sequence could differ from written '.pipe()'s chain?
No comments:
Post a Comment