如何使用gulp重命名index.html中脚本的原始文件?

时间:2017-01-22 04:09:59

标签: javascript caching build gulp

我写了一个gulp任务来重命名文件,以便对它们进行版本控制。问题是index.html脚本引用的文件的文件名不会更改。

例如,在我的index.html

<script src=pub/main_v1.js"></script>

但是,如果您实际浏览构建文件夹到子目录pub,您会发现main.js

以下是自定义gulp任务:

const gulpConcat = require('gulp-concat');
const gulpReplace = require('gulp-replace');
const version = require('./package.json').version;

gulp.task('version', function () {
    var vsn = '_' + version + '.js';
    gulp.src('scripts/**/*.js')
        .pipe(gulpConcat(vsn))
        .pipe(gulp.dest('./prodBuild'));

    return gulp.src('./prodBuild/index.html', { base: './prodBuild' })
        .pipe(gulpReplace(/* some regex */, /* append vsn */))
        .pipe(gulp.dest('./prodBuild'));
});

我需要修复/添加什么才能使原始文件名更改为与脚本标记中的文件名相匹配?

注意:根据gulp-concat docs,我应该能够在prodBuild/[vsn]找到合并的文件,其中[vsn]_v1.js。但是,它无处可寻。

更新:文件在index.html中正确重命名,但我似乎无法重命名原始文件。这是我的构建目录的快照:

prodBuild/
 pub/
   main.js
 someDir/
   subDirA/
     // unimportant stuff
   subDirB/
     file2.js
   file3.js
 // ...other files and folders...

1 个答案:

答案 0 :(得分:1)

修改 问题是您只返回两个任务中的一个。 gulp简单地忽略了第一个任务,因为它没有被返回。一个简单的解决方案:将其拆分为两个任务,并引用另一个任务,例如this SO answer

旧答案

这看起来像gulp-rename的完美案例。您可以通过gulp-rename简单地管理脚本,如下所示:

.pipe(rename(function (path) {
    path.basename += vsn;
    path.extname = ".js"
  }))

Gulp concat是AFAIK,用于连接文件,而不是特别用于重命名它们。