簡體   English   中英

流/注入問題

[英]Streams/gulp-inject issue

我正在嘗試使用動態目標調用gulp-inject 如果一個HTML文件包含多個目標,則每個目標都會覆蓋最后一個目標,因此我嘗試將它們移到另一個函數中。 問題是,現在gulp-inject無法訪問目標(通過記錄到達目標的位置來確定)。

下面的代碼應作為示例(已簡化,但應顯示正在發生的事情):

HTML:

<body>
  <!-- bundle1:js -->
  <!-- endinject -->

  <!-- bundle2:js -->
  <!-- endinject -->
</body>

Gulpfile.js:

var gulp = require('gulp');
var inject = require('gulp-inject');
var through2 = require('through2');
var bundles = require('./bundles');

var localInject = function () {
    return through2.obj(function (file, enc, cb) {
        if (file.isNull()) {
            return cb(null, file);
        }

        if (file.isStream()) {
            return cb(new gutil.PluginError('gulp-inject', 'Streaming not supported'));
        }

        var scriptBundles = Object.keys(bundles.scripts);
        var referencedScriptBundles = [];

        scriptBundles.forEach(function (bundle) {
            var expression = "(" + bundle + ":\w*)";
            var regex = new RegExp(expression, "ig");
            if (regex.test(file.contents.toString('utf-8'))) {
                //console.log('matched', bundle, 'in', file.path);
                referencedScriptBundles.push(bundle);
            }
        });

        if (referencedScriptBundles.length) {
            referencedScriptBundles.forEach(function(bundle) {
                inject(gulp.src(bundles.scripts[bundle], {
                    read: false
                }), {
                    name: bundle
                });
            });
            cb(null, file);
        } else {
            cb(null, file);
        }
    });
};

gulp.task('inject:dev', function () {
    return gulp.src('./Views/**/*.cshtml', { base: './' })
        .pipe(debug())
        .pipe(localInject())
        .pipe(gulp.dest('.'));
});

Bundles.js:

module.exports = {
  scripts: {
    bundle1: ['blah/**/*.js'],
    bundle2: ['otherblah/**/*.js']
  }
};

我的流媒體部分可能缺乏知識,但是除了gulp-inject內部似乎沒有獲取文件塊之外,其他所有東西都可以正常工作。 該插件在我的視圖中找到了正確的包,並且從我的包文件中注入了要注入的腳本,只是似乎沒有對目標文件的引用。

我敢肯定我已經在發布之前嘗試過了,但是我通過管道注入當前流並使用async.seriesEach修復了它。

this.pipe(inject(...));

總是簡單的事情!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM