gulp.srcにファイルへの完全なパスの配列が渡されたくないのはなぜですか?


94

処理したいファイルの配列をgulp.srcに渡そうとしています。これが現状の配列です。

['bower_components/jquery/jquery.js',
 'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
 'bower_components/superscrollorama/jquery.superscrollorama.js' ]

そのgulp.srcはそれが好きではないようですが、3番目の要素が最終宛先に到達していません。

次のようなワイルドカード文字を導入すると、すべてが正常に機能することがわかりました。

['bower_components/**/jquery.js',
 'bower_components/**/js/greensock/TweenMax.min.js',
 'bower_components/**/jquery.superscrollorama.js' ]

しかし、なぜ?グロビングが機能する方法と何か関係がありますか?私はググってみましたが見つけられません。

多分これはグロビングの意図された目的ではないかもしれませんが、それがこのように機能するべきであると私には意味がありません。誰かが光を当てることはできますか?

回答:


162

フルパスの配列を渡すと、各ファイルは個別に処理されます。グロビングはパスのルートがどこにあるかを知りません(実際、最初のグロブに基づいて推測します)。したがって、各ファイルのルートはファイルに含まれ、相対パスは空です。

ただし、簡単な解決策があります。キーbaseを2番目の引数として持つオブジェクトをに渡すgulp.srcと、すべてが正しい相対パスになります。

return gulp.src(['bower_components/jquery/jquery.js',
                'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
                'bower_components/superscrollorama/jquery.superscrollorama.js' ],
            {base: 'bower_components/'})
        .pipe(...);

23
また、これはgulpのドキュメントではまったく言及されていません。これを理解するには、glob-streamをクリックしてドキュメントにアクセスする必要があります。
OverZealous 2014年

9
パスのベースがすべて同じでない場合はどうなりますか?その特定のシナリオについて同様の質問が開かれています:gulp srcが必要なjsonファイルの配列値を読み取らない
Andre

1
私の側から同じ質問。私が実行する必要のあるタスクには2つの異なるベースがあります
Cynthia Sanchez

4
おそらく常にファイルシステムのどこかに共通のベースがあるのでしょうか?それがあったとしても"/"。gulpがプロジェクトディレクトリのルートから実行されている場合は、現在のディレクトリをベースとして指定し、現在のディレクトリにパイプします。gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
numbers1311407 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.