grunt-contrib-sass导致Grunt重新加载自己

时间:2013-12-02 11:50:13

标签: sass gruntjs vagrant grunt-contrib-watch

我已经设置了一个Vagrant盒子(精确32)来运行通常的Grunt东西,但它花了太长时间。

Running "watch" task
Waiting...OK
>> File "../../home/vagrant/app/wp-content/themes/testcss/_vars.scss" changed.

Running "sass:dist" (sass) task
File "/home/vagrant/app/wp-content/themes/test/css/styles.css" created.

Done, without errors.
Completed in 40.392s at Mon Dec 02 2013 11:34:02 GMT+0000 (UTC) - Waiting...
OK
>> File "../../home/vagrant/app/wp-content/themes/test/css/styles.css" changed.

Completed in 0.000s at Mon Dec 02 2013 11:34:02 GMT+0000 (UTC) - Waiting...

我在共享文件夹和VM中的本机文件夹上尝试过此操作,但没有任何更改。我正在使用grunt-contrib-sass插件,虽然我也尝试了grunt-sass并且需要相似的时间。 watch事件会快速触发,但VM会消耗所有备用CPU利用率,直到CSS编译完成。

手动运行sass大约需要2秒

知道从哪里开始?

的package.json

{
  "name": "www",
  "version": "0.0.0",
  "dependencies": {},
  "devDependencies": {
    "grunt": "~0.4.2",
    "grunt-autoprefixer": "~0.4.0",
    "grunt-concurrent": "~0.4.1",
    "grunt-contrib-clean": "~0.5.0",
    "grunt-contrib-coffee": "~0.7.0",
    "grunt-contrib-compass": "~0.6.0",
    "grunt-contrib-concat": "~0.3.0",
    "grunt-contrib-connect": "~0.5.0",
    "grunt-contrib-copy": "~0.4.1",
    "grunt-contrib-cssmin": "~0.7.0",
    "grunt-contrib-htmlmin": "~0.1.3",
    "grunt-contrib-imagemin": "~0.3.0",
    "grunt-contrib-jshint": "~0.7.1",
    "grunt-contrib-uglify": "~0.2.0",
    "grunt-contrib-watch": "~0.5.2",
    "grunt-google-cdn": "~0.2.0",
    "grunt-newer": "~0.5.4",
    "grunt-ngmin": "~0.0.2",
    "grunt-rev": "~0.1.0",
    "grunt-svgmin": "~0.2.0",
    "grunt-usemin": "~2.0.0",
    "jshint-stylish": "~0.1.3",
    "load-grunt-tasks": "~0.2.0",
    "time-grunt": "~0.2.1",
    "karma-ng-scenario": "~0.1.0",
    "grunt-karma": "~0.6.2",
    "karma-chrome-launcher": "~0.1.0",
    "karma-script-launcher": "~0.1.0",
    "karma-firefox-launcher": "~0.1.0",
    "karma-html2js-preprocessor": "~0.1.0",
    "karma-jasmine": "~0.1.3",
    "requirejs": "~2.1.9",
    "karma-requirejs": "~0.2.0",
    "karma-coffee-preprocessor": "~0.1.0",
    "karma-phantomjs-launcher": "~0.1.0",
    "karma": "~0.10.5",
    "karma-ng-html2js-preprocessor": "~0.1.0",
    "grunt-contrib-sass": "~0.5.1",
    "grunt-php": "~0.3.0"
  },
  "engines": {
    "node": ">=0.8.0"
  },
  "scripts": {
    "test": "grunt test"
  }
}

修改

我已经大致发现了问题所在。每当我的grint-contrib-sass任务从grunt-contrib-watch触发时,它实际上会重新加载Grunt的所有模块。我不明白为什么会这样做,也不清楚为什么这是必要的。我已经改变了问题标题以反映这一点。

3 个答案:

答案 0 :(得分:1)

除非你给流浪者提供大量的cpu(通常它使用1 cpu核心,我相信),我希望grunt比你的主机运行慢。如果您没有使用nfs,那么缓慢的IO将成为下一个嫌疑人。

我们也在流浪汉中使用grunt,但只使用少量包(大多数是contrib插件),在iMac上流浪者需要大约2秒,所以你的问题可能确实是缓慢的IO或某些包必须进行大量的文件操作。

如果单独将grunt watch与sass插件隔离,与手动运行grunt sass相比,是否需要相同的时间?如何在主机上运行?

要考虑的另一点是尽量不要观看由grunt生成的文件,如果grunt任务触发另一个任务,你可能会遇到奇怪的问题。

答案 1 :(得分:0)

我发现这似乎是由于spawn选项造成的。将此设置为false会停止整个重新加载。

我现在遇到的问题是,当sass编译器任务运行时,监视会重新加载,以便监视的css文件上的livereload并不总是有效。

答案 2 :(得分:0)

我们使用jit-grunt在此问题上取得了平庸的成功。我们所做的是我们已在load-grunt-tasks中将jit-grunt替换为Gruntfile.jsgrunt serve的执行从20-30秒下降到不到4秒。瓶颈现在可能是compass:server加载,这与慢Shared folder

有关

仍在进行没有咕噜声的Karma测试(仅使用karma-cli) - 这种方式更快。<​​/ p>