4

私は 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()受け取ります。filevinyl

なぜvinyl.isVinyl()戻るのfalseですか?

fileオブジェクトに_isVinylプロパティがないのはなぜですか?

4

1 に答える 1

4

これは、Github でどのバージョンのvinyl-fsandを調べ、ローカルインストールでどのバージョンの and を使用しているかの問題です。vinylvinyl-fsvinylgulp

次のように入力して、 gulp をインストールした可能性がありnpmjs.comます。

$ npm install --save-dev gulp

これは現在3.9.1、gulp のバージョンをインストールします。を使用して、どのバージョンvinyl-fsとgulpvinyl3.9.1バージョンが依存しているかを確認できますnpm ls。そのコマンドからの(省略された)出力は次のとおりです。

└─┬ 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 がこのプロパティを持っています。

は、gulp インストールによって出力されたビニールgulp@3.9.1ファイルを使用してビニール ファイルを出力するため、プロパティがありません。そして、それがあなたの例で関数が返される理由です。vinyl@0.4.6._isVinylvinyl.isVinyl()false

今後の gulp 4.0の現在の開発バージョンでは、 vinyl@1.2.0. そのバージョンの gulpをインストールする場合、例のvinyl.isVinyl()呼び出しは を返しtrueます。

于 2016-08-25T16:56:27.890 に答える