我已经设置了一个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的所有模块。我不明白为什么会这样做,也不清楚为什么这是必要的。我已经改变了问题标题以反映这一点。
答案 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.js
。 grunt serve
的执行从20-30秒下降到不到4秒。瓶颈现在可能是compass:server
加载,这与慢Shared folder
。
仍在进行没有咕噜声的Karma测试(仅使用karma-cli
) - 这种方式更快。</ p>