grunt-contrib-sass заставляет Grunt перезагружаться

Я настроил коробку Vagrant (precise32) для запуска обычных вещей 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...

Я пробовал это в общей папке и в собственной папке на виртуальной машине без изменений. Я использую плагин grunt-contrib-sass, хотя я также пробовал grunt-sass, и это занимает примерно столько же времени. Событие наблюдения запускается быстро, но затем виртуальная машина потребляет все свободное использование ЦП, пока не завершится компиляция 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. Я не понимаю, почему он это делает и зачем это нужно. Я изменил название вопроса, чтобы отразить это.


person Robin Elvin    schedule 02.12.2013    source источник


Ответы (3)


Если вы не отдаете много процессора бродяге (обычно он использует 1 ядро ​​​​процессора, я полагаю), я ожидаю, что grunt будет работать медленнее, чем ваша хост-машина. Если вы не используете nfs, то следующим подозреваемым будет медленный ввод-вывод.

Мы также используем grunt в vagrant, но только с небольшим количеством пакетов (в основном contrib plugin), на iMac это занимает около 2 секунд в vagrant, поэтому ваша проблема действительно может быть медленным вводом-выводом или определенным пакетом, который должен делать много файловые операции.

Если вы изолируете только свой плагин grunt watch to sass, займет ли это столько же времени, сколько запуск grunt sass вручную? как насчет запуска на вашей хост-машине?

Еще один момент, который следует учитывать, — старайтесь не смотреть файлы, которые будут сгенерированы grunt, вы можете столкнуться со странными проблемами, если одна задача grunt вызовет другую.

person bitinn    schedule 03.12.2013
comment
Спасибо за указатели. Я смотрел на ядра ЦП и опцию NFS, но это не имело никакого значения. На самом деле я связал проблему с количеством модулей в том, что для запуска grunt требуется некоторое время, но когда часы видят, что файл изменился, весь grunt перезагружается, что, конечно, означает, что он снова перезагружает все модули. - person Robin Elvin; 03.12.2013

Я узнал, что это, похоже, связано с опцией спавна. Установка значения false останавливает всю перезагрузку.

Теперь у меня проблема с тем, что часы перезагружаются, когда запускается задача компилятора sass, так что прямая загрузка просматриваемых файлов css не всегда работает.

person Robin Elvin    schedule 03.12.2013

Мы добились посредственного успеха в решении этой проблемы с помощью jit-grunt. Что мы сделали, так это заменили load-grunt-tasks на jit-grunt в Gruntfile.js. Выполнение grunt serve сократилось с 20-30 секунд до менее чем 4 секунд. Узким местом сейчас, вероятно, является compass:server загрузка, и это связано с медленным Shared folder.

Все еще выполняю тесты кармы без ворчания (просто используя karma-cli) - так намного быстрее.

person sampoh    schedule 31.01.2014