我正在学习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);
})
}这是创建vinyl文件的gulp源代码的一部分:
https://github.com/gulpjs/vinyl-fs/blob/master/lib/src/wrap-with-vinyl-file.js
我的困惑:
向transformFunction注册的though2.obj()接收一个应该是vinyl文件的file对象。
为什么vinyl.isVinyl()返回false?
为什么file对象没有_isVinyl属性?
发布于 2016-08-25 16:56:27
这取决于您在Github上查看的vinyl-fs和vinyl的哪个版本,以及您的本地gulp安装使用的是哪些版本的vinyl-fs和vinyl。
您可能通过键入以下命令从npmjs.com安装gulp:
$ npm install --save-dev gulp这目前安装了gulp的3.9.1版本。通过使用vinyl-fs和vinyl,您可以看到gulp的3.9.1版本依赖于哪个版本。下面是该命令的(缩写)输出:
└─┬ 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上看到的那样,不是有._isVinyl属性吗?只有较新的版本,如vinyl@1.2.0 拥有这份财产。
由于gulp@3.9.1使用vinyl@0.4.6发出乙烯基文件,所以您的gulp安装发出的乙烯基文件不具有._isVinyl属性。这就是为什么vinyl.isVinyl()函数在示例中返回false的原因。
当前的即将发布的GUP4.0开发版本使用vinyl@1.2.0。如果要安装那个版本的gulp,则示例中的vinyl.isVinyl()调用将返回true。
https://stackoverflow.com/questions/39149917
复制相似问题