Javascript 为什么对于gulp发出的乙烯基文件,乙烯基.is乙烯基()返回false?
我正在学习gulp源代码,并试图编写一个gulp插件 现在我有些困惑了 下面是我的插件代码: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
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