首页 > 解决方案 > 使用 gulp-if 有条件地使用函数

问题描述

我试图在生产时有条件地更改 JS 文件的路径。我正在使用gulp-inject-stringwithgulp-if来调用一个函数,该函数插入我的远程路径 + 一系列 html 文件的父文件夹名称:

```
...(require a bunch of stuff here)...
var inject = require('gulp-inject-string');

function getFolders(dir) {
    return fs.readdirSync(dir)
        .filter(function(file) {
            return fs.statSync(path.join(dir, file)).isDirectory();
        });
}

function injectAfterEach(src) {
    var folders = getFolders(config.root.dest);

    var tasks = folders.map(function(folder) {
        if (folder !== 'base') {
            var fullPath = path.join(config.remotePath, folder, '/');
            console.log('folder: ' + fullPath);
            return gulp.src(src)
                .pipe(inject.afterEach('<script src="', fullPath))
                .pipe(gulp.dest(config.tasks.html.dest))
        }
    });
    return tasks;
}

gulp.task('html', function() {

    return gulp.src(config.tasks.html.src)
        .pipe(gulpif(process.env.NODE_ENV == 'production', injectAfterEach(config.tasks.html.src) ))
        .pipe(gulpif(process.env.NODE_ENV == 'production', removeCode({ production: true })))
        .pipe(gulpif(process.env.NODE_ENV == 'production', htmlmin(config.tasks.html.htmlmin)))
        .pipe(gulp.dest(config.tasks.html.dest))
        .pipe(browserSync.stream());
});
```

我不断收到“dest.on 不是函数”错误,我猜这是因为我injectAfterEach没有返回 stream.Transform 对象?有人可以澄清有条件地运行该功能的最佳方式吗?我的 gulp 有点不稳定,但我尝试参考这个特定用例的api 文档

标签: gulp

解决方案



推荐阅读