9

Grunt 编译 css 文件需要很长时间,我不确定这是否正常,但普通指南针手表大约需要 5 秒。

所以问题是是否有任何方法可以加快 Grunt 的编译时间,还是坚持使用 compass watch 更好?

Running "compass:dist" (compass) task
♀unchanged images/sprite-sf580a96666.png
overwrite stylesheets/app.css (3.263s)
unchanged images/sprite-sf580a96666.png
overwrite stylesheets/app_fr.css (3.289s)
Compilation took 11.116s

Running "watch" task
Completed in 13.974s at Wed Dec 18 2013 13:53:05 GMT-0500 (Eastern Standard Time- Waiting...
OK
>> File "scss\_core.scss" changed.

Gruntfile.js:

compass: {
        dist: {
            options: {
            config: 'config.rb'
            }
        }
    },

    watch: {
        sass: {
            files: ['scss/*.scss'],
            tasks: ['compass:dist'],
            options: {
                spawn: false,
            }
        },
        scripts: {
            files: ['js/*.js'],
            tasks: ['concat', 'uglify'],
            options: {
                spawn: false,
            }
        }
    }

});
4

4 回答 4

16

除了 Simon 提到watch的 grunt-contrib-compass 选项之外,您还可以使用grunt-concurrent来有效地运行两个进程,grunt watch并且compass watch彼此并排运行:

concurrent: {
    watch: {
        tasks: ['watch', 'compass:watch'],
        options: {
            logConcurrentOutput: true
        }
    }
},
compass: {
    watch: {
        options: {
            watch: true
        }
    }
}

如果您想在构建、部署或其他任何需要compile而不是 的Grunt 中运行 compass,则watch需要创建第二个 compass 任务并使用它:

compass: {
    // Compass grunt module requires a named target property with options.
    compile: {
        options: {}
    }
}
于 2014-02-10T23:34:28.357 回答
5

好吧,您可以使用 Grunt-contrib-compasswatch选项观看。这将产生指南针手表,因此您将获得更好的性能。虽然这不允许您观看多种类型的文件(例如,如果您还观看 .coffee 文件或始终重建 js 等)。

如果您绝对需要grunt-contrib-watch,请确保使用 grunt 任务激活 sass 缓存。从您粘贴在这里的配置来看,它看起来是这样。但是缓存问题通常是 Compass 编译时间过长的原因;所以如果我是你,我会仔细检查我的 Gruntfile.js。

此外,许多精灵和图像处理方法可能需要相当长的时间来处理。

于 2013-12-18T20:12:54.470 回答
2

在这方面可能有点晚了,但如果这对任何人都有帮助:

我发现 grunt-contrib-watch 和 sass 的性能也很差。解决这个问题的最好方法似乎是使用不同的手表插件。我发现grunt-watch-nospawn(与 grunt-contrib-watch 插件相反)编译 sass 的速度要快得多。非常明显 - 我看到大约两秒钟的改进。

如果您想进一步调整速度,可以使用grunt-sass代替 grunt-contrib-sass,后者使用 libsass 来提供另一个速度提升。

这与自动前缀器相结合,例如。nDmitry 的(无法链接,没有代表)这应该填补因省略 Compass 而留下的功能空白。

希望有帮助。

于 2014-11-22T22:50:47.227 回答
0

我知道这个问题在这一点上已经有几年了,但我想我会添加另一个潜在的原因/解决方案。

首先,尝试使用启动你的 grunt 服务器--verbose并观察你的 sass 任务在哪里花费了大部分时间。有一些插件会报告每个部分的品尝时间,但对我来说,只需观察--verbose输出就可以很清楚地知道延迟在哪里。对我来说,这不是真正的 sass 任务,而是加载不必要的依赖项。

正如Grunt 的 GitHub 存储库上的本期所述,某些任务可能需要很长时间才能完成的一个原因是 Grunt 每次运行时都会加载所有任务。因此,即使 grunt-contrib-watch 仅在您更改 sass 文件时运行 compass:dist 任务,grunt 仍在加载所有任务及其依赖项。

现在有一个名为jit-grunt(或在npm上)的插件可以解决这个问题,并且只加载运行任务所需的内容。这帮助我的指南针任务更快地完成。

于 2015-07-06T21:02:46.767 回答