【问题标题】:Slow pug compiling to HTML缓慢的哈巴狗编译成 HTML
【发布时间】:2018-02-21 03:45:23
【问题描述】:

我正在使用 gulp 将我的 pug 文件编译为 HTML。每次我做出任何改变,平均需要 30 秒!是否可能是由于我的 gulp 配置中的某些内容(如下所列)?

var gulp   = require('gulp')
var pug = require('gulp-pug')

gulp.task('pug', function () {
  return gulp.src('pug/**/*.pug')
    .pipe(pug({pretty:true, doctype:'HTML'}))
    .pipe(gulp.dest('views'))
})

gulp.task('watch:pug', ['pug'], function () {
  gulp.watch('pug/**/*.pug', ['pug'])
})

【问题讨论】:

  • 这能解决您的问题吗?

标签: javascript gulp pug


【解决方案1】:

我用这个。

仅通过更改的文件

不再浪费宝贵的时间处理未更改的文件。

https://www.npmjs.com/package/gulp-changed

【讨论】:

    【解决方案2】:

    如果是 pug 编译让您变慢,请添加缓存。

    var gulp     = require('gulp');
    var pug      = require('gulp-pug');
    var cached   = require('gulp-cached');
    var remember = require('gulp-remember');
    
    gulp.task('pug', function () {
      return gulp.src('pug/**/*.pug', { since: gulp.lastRun('pug') }))
        .pipe(cached('pug'))
        .pipe(pug({pretty:true, doctype:'HTML'}))
        .pipe(remember('pug'))
        .pipe(gulp.dest('views'))
    })
    
    gulp.task('watch', function(done) {
      gulp.watch('pug/**/*.pug', gulp.parallel('pug'));
      return done();
    });
    
    gulp.task('default', gulp.series('pug', 'watch'));
    

    选项gulp.lastRun 将只返回自上次运行给定任务以来更改的文件。如果您使用default 任务来构建您的文件,pug 将只需要处理已更改的文件。因为 gulp 进程通过 watch 函数保持活动状态,所以它能够缓存所有以前未更改的文件。

    REMARK:这只有在你使用 Gulp v4 时才有效,如果不是,你真的应该升级;)

    Gulp

    有一个包名为gulp-cache,即{ since: gulp.lastRun('pug') }。所以你应该可以调整sn-p:

    var gulp     = require('gulp');
    var pug      = require('gulp-pug');
    var cache    = require('gulp-cache');
    var cached   = require('gulp-cached');
    var remember = require('gulp-remember');
    
    gulp.task('pug', function () {
      return gulp.src('pug/**/*.pug'))
        .pipe(cache('pug'))
        .pipe(cached('pug'))
        .pipe(pug({pretty:true, doctype:'HTML'}))
        .pipe(remember('pug'))
        .pipe(gulp.dest('views'))
    })
    
    gulp.task('watch', function(done) {
      gulp.watch('pug/**/*.pug', ['pug']);
      return done();
    });
    
    gulp.task('default', ['pug', 'watch']);
    

    我不确定你是否真的需要gulp-cachedgulp-remember。这些包将输入文件链接到转换后的输出文件。这意味着gulp-remember 将输出所有已处理的文件。如果文件没有更新,它将输出缓存的版本。如果您不需要所有文件(例如,因为您没有连接它们),您可以删除这些行。

    即使包名非常相似,它们也完全不同:

    gulp-cache 只会转发自上次构建以来已更改的文件。它本质上是一样的,然后是选项{ sine: gulp.lastRun('pug') }

    因此,如果您需要在管道中进一步处理文件,则需要所有 3 个包,否则,包 gulp-cache(不带 d)就足够了。

    【讨论】:

    • 似乎是个好主意,但不幸的是,我目前无法将 Gulp 升级到 v4..v3.9 中没有这项任务吗?
    • @RomainGaget 我已经更新了答案。但该解决方案未经测试。
    • 太棒了,它实际上可以添加缓存并记住。编译时间从 40 秒到 3 秒!!谢谢@Iqon
    • 太棒了!在这种情况下,我将删除 untested 标签。
    • 这个方法会更新对修改文件有依赖的pug文件吗?我之前尝试过 gulp-cache,它只解析修改后的文件,并没有更改导入它们的文件,这根本没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多