【问题标题】:How to rename the original files of scripts in index.html using gulp?如何使用 gulp 重命名 index.html 中脚本的原始文件?
【发布时间】:2017-01-22 04:09:59
【问题描述】:

我编写了一个 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...

【问题讨论】:

    标签: javascript caching build gulp


    【解决方案1】:

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

    旧答案

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

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

    Gulp concat,AFAIK,用于文件的连接,而不是专门用于重命名它们。

    【讨论】:

    • 这在我的 gulp 任务中会去哪里?
    • Nvm,我现在看到这个 should 也只适用于 gulp-concat :) 你能否添加一个完整的目录结构,包含你在构建之前和之后看到的内容你的问题的那个 gulp 脚本?因为我认为我们需要更多信息才能找到导致此问题的根源
    • 您能解释一下它应该如何与 gulp-concat 一起工作吗?我的理解是 gulp-concat 应该有助于重命名。但是,这似乎对我不起作用。
    • 查看我的更新答案 - 我认为问题完全出在其他地方:)
    • 感谢您迄今为止的帮助!关于您的编辑,应该先执行 concat 任务吗?
    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多