首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么vinyl.isVinyl()对gulp发出的乙烯基文件返回false?

为什么vinyl.isVinyl()对gulp发出的乙烯基文件返回false?
EN

Stack Overflow用户
提问于 2016-08-25 16:01:23
回答 1查看 286关注 0票数 4

我正在学习gulp源代码,并试图编写一个gulp插件。

现在我对某些事情感到困惑。

以下是我的插件代码:

代码语言:javascript
复制
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属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-25 16:56:27

这取决于您在Github上查看的vinyl-fsvinyl的哪个版本,以及您的本地gulp安装使用的是哪些版本的vinyl-fsvinyl

您可能通过键入以下命令从npmjs.com安装gulp:

代码语言:javascript
复制
$ npm install --save-dev gulp

这目前安装了gulp的3.9.1版本。通过使用vinyl-fsvinyl,您可以看到gulp的3.9.1版本依赖于哪个版本。下面是该命令的(缩写)输出:

代码语言:javascript
复制
└─┬ gulp@3.9.1
  └─┬ vinyl-fs@0.3.14
    └─┬ vinyl@0.4.6

因此,gulp@3.9.1依赖于vinyl-fs@0.3.14vinyl-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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39149917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档