Почему винил.isVinyl() возвращает false для файлов винила, испускаемых gulp?
Я изучаю исходный код gulp и попытался написать плагин gulp.
Теперь я чего-то не понимаю.
Это мой код плагина ниже:
module.exports = function(){
return through2.obj(function(file,encode,callback){
console.log(vinyl.isVinyl(file));//false
console.log(file._isVinyl) // undefined
// the reason ? file is not Object of vinyl ? file's property of '_isVinyl' is undefine ?
if(file.isNull()){
callback(null,file);
}
if(file.isStream()){
file.contents = file.contents.pipe(through2(function(chuck,encode,callback){
if(util.isNull(chuck)){
callback(null, chuck);
}
if(util.isBuffer(chuck)){
chuck = new Buffer(String(chuck)
.replace(commentReg, '')
.replace(blankSpaceReg,''))
}
callback(null,chuck);
}));
}
if(file.isBuffer()){
file.contents = new Buffer(String(file.contents)
.replace(commentReg, '')
.replace(blankSpaceReg,''));
}
callback(null,file);
})
}
Это часть исходного кода gulp, где vinyl
файлы созданы:
https://github.com/gulpjs/vinyl-fs/blob/master/lib/src/wrap-with-vinyl-file.js
МОЯ КОНФУЗИЯ:
transformFunction
зарегистрирован в though2.obj()
получает file
объект, который должен быть vinyl
файл.
Почему vinyl.isVinyl()
вернуть false
?
Почему не file
объект имеет _isVinyl
имущество?
1 ответ
Это вопрос о том, какие версии vinyl-fs
а также vinyl
вы смотрите на Github и какие версии vinyl-fs
а также vinyl
ваш местный gulp
установка использует.
Вы, вероятно, установили глоток из npmjs.com
набрав:
$ npm install --save-dev gulp
Это в настоящее время устанавливает версию 3.9.1
глотка Вы можете увидеть, какие версии vinyl-fs
а также vinyl
3.9.1
версия глотка зависит от использования npm ls
, Вот (сокращенный) вывод этой команды:
└─┬ gulp@3.9.1
└─┬ vinyl-fs@0.3.14
└─┬ vinyl@0.4.6
Так gulp@3.9.1
зависит от vinyl-fs@0.3.14
а также vinyl-fs@0.3.14
зависит от vinyl@0.4.6
,
Вот ссылки на эти версии на GitHub:
https://github.com/gulpjs/vinyl-fs/tree/v0.3.14
https://github.com/gulpjs/vinyl/tree/v0.4.6
Как вы можете видеть на GitHub vinyl@0.4.6
не имеет ._isVinyl
имущество. Только новые версии, такие как vinyl@1.2.0
иметь это свойство.
поскольку gulp@3.9.1
испускает виниловые файлы, используя vinyl@0.4.6
виниловые файлы, испускаемые вашей установкой gulp, не имеют ._isVinyl
имущество. И вот почему vinyl.isVinyl()
функция возвращает false
в вашем примере.
Текущая версия разработки для предстоящего gulp 4.0 использует vinyl@1.2.0
, Если вы должны были установить эту версию глотка vinyl.isVinyl()
вызов в вашем примере вернется true
,