Почему винил.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,

Другие вопросы по тегам