0

次のgulpタスクが構成されています。

  var assets = plugins.useref.assets({searchPath: './'}),
        css = plugins.filter('**/main.css'),
        html = plugins.filter('**/*.html');
    return gulp
        .src(config.html.srcheader)
        .pipe(plugins.plumber())
        // collect all assets from source file by the means of useref
        .pipe(assets)
        //// minify main.css
        .pipe(css)
        .pipe(plugins.csso())
        .pipe(css.restore())
        //// Take inventory of the file names for future rev numbers
        .pipe(plugins.rev())
        //// Apply the concat and file replacement with useref
        .pipe(gulp.dest(config.rootdir))
        .pipe(assets.restore())
        .pipe(plugins.useref())
        //// Replace the file names in the html with rev numbers
        .pipe(plugins.revReplace())
        .pipe(transformStream())
        //// rename source
        .pipe(html)
        .pipe(plugins.rename(config.html.customer.targetheader))
        .pipe(gulp.dest(config.html.dir));

このコードは css ファイルを受け取り、それらを縮小し、リビジョン (main-abcde123.css など) を追加し、発生したソース ファイルを処理済みファイルに置き換えます。これは、gulp-userref/gulp-rev/gulp-rev-replace プラグインを使用して行われます (pluginsすべてのロードされたプラグインを含むオブジェクト、つまり plugins.userref - gulp-userref プラグインを参照します)。このコードは正常に動作します。同じストリーム内の結果 css ファイルでいくつかの変更を加えようとしています。これは、次のような関数によって行われtransformStream()ます。

function transformStream() {

    var collect = function(file, enc, cb) {

        console.log(file);
        return cb();
    }

    var emit = function(cb) {
        return cb();
    }

    return through.obj(collect, emit);
}

このコンテキストでthroughgulp-through2プラグインです。

次のコードを見てくださいconsole.log(file);。縮小されたcssのファイル名を取得しようとしています。上記のコードでは、次のように表示されます。

<File "assets/main-34d85b66.css" <Buffer 40 63 68 61 72 73 65 74 20 22 55 54 46 2d 38 22 3b 40 66 6f 6e 74 2d 66 61 63 65 7b 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 22 6d 74 63 22 3b 73 72 63 3a ... >>

つまり、ファイル名ではなく、ある種のバッファが含まれています。私はドキュメントを読みましたthrough2が、物事を明確にしませんでした。

だから、私の質問は: 実際のファイル名にアクセスするにはどうすればよいですか?

4

2 に答える 2

0

gulp-filenamesを試しましたか? このコンテキストでどのように機能するかはわかりませんが、バージョン管理された新しいファイル名がメモリに保存されます。このようなもの:

...
return gulp
    .src(config.html.srcheader)
    .pipe(plugins.plumber())
    .pipe(assets)
    .pipe(css)
    .pipe(plugins.csso())
    .pipe(css.restore())
    .pipe(plugins.rev())
    .pipe(gulp.dest(config.rootdir))
    .pipe(assets.restore())
    .pipe(plugins.useref())
    .pipe(plugins.revReplace())
    .pipe(plugins.fileNames('my-css-file'))
 }

次に、後でファイル名を取得できます

function transformStream() {
    var fileName = plugins.fileNames.get('my-css-file')
}
于 2016-04-20T23:04:17.813 に答える