Javascript 为什么对于gulp发出的乙烯基文件,乙烯基.is乙烯基()返回false?

Javascript 为什么对于gulp发出的乙烯基文件,乙烯基.is乙烯基()返回false?,javascript,gulp,gulp-plugin,vinyl,through2,Javascript,Gulp,Gulp Plugin,Vinyl,Through2,我正在学习gulp源代码,并试图编写一个gulp插件 现在我有些困惑了 下面是我的插件代码: module.exports = function(){ return through2.obj(function(file,encode,callback){ console.log(vinyl.isVinyl(file));//false console.log(file._isVinyl) // undefined // the reaso

我正在学习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源代码中创建文件的部分:

我的困惑:

使用
though2.obj()
注册的对象将接收一个
文件
对象,该对象应为
乙烯基
文件

为什么
vinyl.isVinyl()
返回
false


为什么
文件
对象没有
\u isVinyl
属性?

这是一个问题,您在Github上查看的是哪个版本的
乙烯基fs
乙烯基
以及您的本地
gulp
安装使用的是哪个版本的
乙烯基

您可能通过键入以下内容安装了gulp from:

$ npm install --save-dev gulp
目前安装的是gulp的版本
3.9.1
。您可以通过使用查看gulp的
3.9.1
版本取决于
乙烯基fs
乙烯基
的版本。下面是该命令的(缩写)输出:

└─┬ gulp@3.9.1
  └─┬ vinyl-fs@0.3.14
    └─┬ vinyl@0.4.6
所以
gulp@3.9.1
取决于
乙烯基-fs@0.3.14
乙烯基-fs@0.3.14
取决于
vinyl@0.4.6

以下是GitHub上这些版本的链接:


正如您在GitHub上看到的
vinyl@0.4.6
不具有
属性。只有较新的版本,如
vinyl@1.2.0

自<代码>gulp@3.9.1
使用
vinyl@0.4.6
gulp安装发出的乙烯基文件没有
\u isvenyly
属性。这就是为什么在您的示例中,
vinyl.isVinyl()
函数返回
false

当前使用
vinyl@1.2.0
。如果要调用
vinyly.isVinyl()
调用,则示例中的调用将返回
true