【问题标题】:Why does vinyl.isVinyl() return false for vinyl files emitted by gulp?为什么vinyl.isVinyl() 对gulp 发出的乙烯基文件返回false?
【发布时间】:2016-08-25 16:01:23
【问题描述】:

我正在学习 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

我的困惑:

though2.obj() 注册的transformFunction 接收一个file 对象,该对象应该是一个vinyl 文件。

为什么vinyl.isVinyl() 返回false

为什么file 对象没有_isVinyl 属性?

【问题讨论】:

    标签: javascript gulp gulp-plugin vinyl through2


    【解决方案1】:

    这与您在 Github 上查看的 vinyl-fsvinyl 的哪个版本以及您的本地 gulp 安装正在使用的 vinyl-fsvinyl 的哪个版本有关。

    您可能通过键入以下内容从npmjs.com 安装了 gulp:

    $ npm install --save-dev gulp
    

    这当前安装版本 3.9.1 的 gulp。您可以使用npm ls 查看3.9.1 版本的gulp 依赖于哪些版本的vinyl-fsvinyl。这是该命令的(缩写)输出:

    └─┬ 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 上看到的 vinyl@0.4.6 确实 ._isVinyl 属性。只有较新的版本,例如 vinyl@1.2.0 have this property

    由于gulp@3.9.1 使用vinyl@0.4.6 发出黑胶文件,您的 gulp 安装发出的黑胶文件没有._isVinyl 属性。这就是为什么 vinyl.isVinyl() 函数在您的示例中返回 false 的原因。

    当前的 development version for the upcoming gulp 4.0 使用 vinyl@1.2.0 。如果您要使用 install that version of gulp,则示例中的 vinyl.isVinyl() 调用将返回 true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 2023-03-23
      • 2016-08-15
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多