为什么 vinyl.isVinyl() return 对于 gulp 发出的乙烯基文件是错误的?
Why does vinyl.isVinyl() return false for vinyl files emitted by 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
我的困惑:
用 though2.obj()
注册的 transformFunction
收到一个 file
对象,它应该是一个 vinyl
文件。
为什么 vinyl.isVinyl()
return false
?
为什么 file
对象没有 _isVinyl
属性?
这与您在 Github 上查看的 vinyl-fs
和 vinyl
版本以及您本地的 vinyl-fs
和 vinyl
版本有关gulp
安装正在使用。
您可能通过键入以下内容从 npmjs.com
安装了 gulp:
$ npm install --save-dev gulp
当前安装 gulp 的 3.9.1
版本。您可以使用 npm ls
查看 vinyl-fs
和 vinyl
的 3.9.1
版本 gulp 所依赖的版本。这是该命令的(缩写)输出:
└─┬ 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
have this property.
由于 gulp@3.9.1
使用 vinyl@0.4.6
发出乙烯基文件,因此您的 gulp 安装发出的乙烯基文件没有 ._isVinyl
属性。这就是为什么 vinyl.isVinyl()
函数 returns false
在你的例子中。
当前 development version for the upcoming gulp 4.0 uses vinyl@1.2.0
. If you were to install that version of gulp 您示例中的 vinyl.isVinyl()
调用将 return true
.
我正在学习 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
我的困惑:
用 though2.obj()
注册的 transformFunction
收到一个 file
对象,它应该是一个 vinyl
文件。
为什么 vinyl.isVinyl()
return false
?
为什么 file
对象没有 _isVinyl
属性?
这与您在 Github 上查看的 vinyl-fs
和 vinyl
版本以及您本地的 vinyl-fs
和 vinyl
版本有关gulp
安装正在使用。
您可能通过键入以下内容从 npmjs.com
安装了 gulp:
$ npm install --save-dev gulp
当前安装 gulp 的 3.9.1
版本。您可以使用 npm ls
查看 vinyl-fs
和 vinyl
的 3.9.1
版本 gulp 所依赖的版本。这是该命令的(缩写)输出:
└─┬ 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
have this property.
由于 gulp@3.9.1
使用 vinyl@0.4.6
发出乙烯基文件,因此您的 gulp 安装发出的乙烯基文件没有 ._isVinyl
属性。这就是为什么 vinyl.isVinyl()
函数 returns false
在你的例子中。
当前 development version for the upcoming gulp 4.0 uses vinyl@1.2.0
. If you were to install that version of gulp 您示例中的 vinyl.isVinyl()
调用将 return true
.