无法让 gulp-rev-replace 与 gulp-useref 一起使用

Can't get gulp-rev-replace working with gulp-useref

继续我之前的 - 但这次是下一步:让文件修订生效。

我正在使用 Gulp 学习 johnpapa 的自动化课程,但似乎又碰壁了(这就是当您尝试将简洁的课程改编为不同的文件结构时得到的结果 :P )。

基本上,问题是我确实得到了以修订命名的文件,但这些名称没有进入最终结果 test.jsp,我不明白为什么...

这是任务(为简洁起见省略了缩小,但它可以很好地处理文件修订):

gulp.task('build-dev', ['inject'], function () {

    var assets = $.useref.assets({searchPath: ''});

    return gulp
        .src(config.indexFile)
        .pipe($.rename('test.jsp'))
        .pipe($.plumber())
        .pipe(assets)
        .pipe($.rev())
        .pipe(assets.restore())
        .pipe($.useref())
        .pipe($.revReplace({modifyUnreved: replaceDirectory, modifyReved: replaceDirectory}))
        .pipe(gulp.dest(config.indexLocation))
        .pipe($.rev.manifest())
        .pipe(gulp.dest(config.indexLocation))
        ;
});

inject 是将 css 和 js 引用注入索引文件的任务(正常工作),$require('gulp-load-plugins')({lazy: true})config.indexFileindex.jsp.

replaceDirectory 函数是(因为 rev-manifest 生成完整路径名而使用):

function replaceDirectory(path) {

    var strToReplace = '../..';
    var strToReplaceWith = process.cwd().replace(/\/g, '/') + '/WebContent';

    if (path) {
        return path.replace(strToReplace, strToReplaceWith);
    } else {
        return path;
    }
}

我的文件结构(与课程中的不同)是:

- ModuleDir
    - dist
        - css
            - lib.css
            - app.css
        - fonts
        - images
        - js
            - lib.js
            - app.js
    - css
    - js
    - web-app
        - InnerDir
            - index.jsp
            - test.jsp
    - package.json, bower.json, etc. (all the required files)

基本上,index.jsp 是为 CSS 和 JS 库和应用程序资产处理的,它们被缩小并连接成 lib.css、lib.js、app.css和 app.js。后来所有这些都被注入到 index.jsp 的副本中,称为 test.jsp.

磁盘上的资产收集、串联、注入工作和文件修改工作非常出色。 test.jsp 中的文件名更新- 没那么多...

任何想法或指示将不胜感激。

与此同时(除非我找到问题的根源或你们中的任何人可以提供帮助),我选择了不同的缓存清除方案:

gulp.task('build-dev', ['inject'], function () {

    var assets = $.useref.assets({searchPath: ''});
    var cb = Math.random();

    return gulp
        .src(config.indexFile)
        .pipe($.rename('test.jsp'))
        .pipe($.plumber())
        .pipe(assets)
        .pipe(assets.restore())
        .pipe($.useref())
        .pipe($.replace('dist/css/lib.css', 'dist/css/lib.css?cb=' + cb))
        .pipe($.replace('dist/css/app.css', 'dist/css/app.css?cb=' + cb))
        .pipe($.replace('dist/js/lib.js', 'dist/js/lib.css?cb=' + cb))
        .pipe($.replace('dist/js/app.js', 'dist/js/app.js?cb=' + cb))
        .pipe(gulp.dest(config.indexLocation))
        ;
});

这不是我想要的答案,但却是我需要的答案。 :)

您必须将 replaceInExtensions: '.jsp' 添加到 revReplace() 的选项中。

这个问题纠结了一天半,看了插件代码才搞定。我正在使用 .php 文件。文档确实说你需要这样做,但很容易错过。

希望对您有所帮助。