我写了一个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...
答案 0 :(得分:1)
修改强> 问题是您只返回两个任务中的一个。 gulp简单地忽略了第一个任务,因为它没有被返回。一个简单的解决方案:将其拆分为两个任务,并引用另一个任务,例如this SO answer。
旧答案
这看起来像gulp-rename的完美案例。您可以通过gulp-rename
简单地管理脚本,如下所示:
.pipe(rename(function (path) {
path.basename += vsn;
path.extname = ".js"
}))
Gulp concat是AFAIK,用于连接文件,而不是特别用于重命名它们。