首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >溪流/吞咽-注射问题

溪流/吞咽-注射问题
EN

Stack Overflow用户
提问于 2015-08-04 19:34:05
回答 1查看 272关注 0票数 1

我试图用动态目标给gulp-inject打电话。如果一个HTML文件包含多个目标,那么每个目标都会覆盖最后一个目标,所以我尝试将它们移到另一个函数中。问题是,现在gulp-inject没有访问目标的权限(由登录到的位置确定)。

下面的代码应该作为一个示例(这是简化的,但应该显示正在发生的事情):

HTML:

代码语言:javascript
复制
<body>
  <!-- bundle1:js -->
  <!-- endinject -->

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

Gulpfile.js:

代码语言:javascript
复制
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:

代码语言:javascript
复制
module.exports = {
  scripts: {
    bundle1: ['blah/**/*.js'],
    bundle2: ['otherblah/**/*.js']
  }
};

可能是因为我对流缺乏了解,但是除了在gulp-inject内部,它似乎没有得到文件块,一切都很好。插件在我的视图中找到了正确的包,而我的包文件中的脚本似乎没有对目标文件的引用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-06 15:21:50

我确信在发布之前我已经尝试过了,但是我通过管道将当前流注入并使用async.seriesEach修复了它。

代码语言:javascript
复制
this.pipe(inject(...));

总是简单的事情!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31817738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档