Sass — следите за тем, чтобы не перекомпилировать

#css #ruby #sass #watch

#css #ruby #sass #Смотреть

Вопрос:

Sass обновляет мою основную таблицу стилей build.css , когда я сохраняю изменения build.scss , но не будет обновляться build.css , например, при сохранении изменений в любых частичных _grid-settings.scss файлах . По сути, мне приходится вручную повторно сохранять build.scss каждый раз, когда я вношу частичное изменение, чтобы Sass обнаружил изменение.

С моего терминала:

 Justins-MacBook-Air:ageneralist justinbrown$ sass --watch stylesheets:stylesheets
>>> Sass is watching for changes. Press Ctrl-C to stop.
  write stylesheets/build.css
[Listen warning]:
  Listen will be polling for changes. Learn more at https://github.com/guard/listen#polling-fallback.
  

Мой каталог:

 stylesheets/
├── base
│   └── _base.scss
├── build.css
├── build.scss
├── layout
│   └── _layout.scss
└── vendor
    ├── _grid-settings.scss
    ├── bourbon
    ├── highlight
    └── neat
  

Я использую:

  • Sass 3.3.8.
  • Ruby 2.0.0-p353
  • OSX 10.9

Я просмотрел несколько сообщений SO о проблемах, sass --watch но ни один из них пока не помог мне найти решение.

РЕДАКТИРОВАТЬ: я добавляю свой build.scss здесь на всякий случай, если это проблема:

 @import "vendor/bourbon/bourbon";
@import "vendor/grid-settings";
@import "vendor/neat/neat";
@import "base/base";
@import "layout/layout";
  

Комментарии:

1. Мб это будет работать с абсолютным путем импорта?

2. @JAre пробовал это, но я получаю тот же результат.

3. Возможно ли, что sass не отслеживает все подкаталоги внизу stylesheets ?

4. вы можете протестировать его, добавив неполный файл scss.

5. @JAre попробовал это, добавив vendor/test.scss , но все равно безуспешно. sass --watch обрабатывает оба неполных файла scss при запуске, но не обновляет test.css при последующих сохранениях.

Ответ №1:

У меня была такая же проблема.

Мне удалось исправить это, удалив каталог кэша SASS. Я также побежал sudo gem update обновлять все драгоценные камни в моей системе.

Я не уверен, какая из этих вещей исправила это, или это была комбинация двух.

Комментарии:

1. Прошло некоторое время, но я думаю, что если бы я сделал либо the gem update , либо gem install listen предложенное @EoghanM ниже, это, вероятно, помогло бы.

2. Где находится кэш SASS?

3. Он находится в скрытой папке с именем «.sass-cache» в корне того места, где вы компилируете свои файлы SASS.

Ответ №2:

Я также придерживался проблемы, связанной с тем, что Sass, казалось, неправильно отслеживал все изменения файлов.

Sass не может отслеживать изменения в файлах, которые расположены по пути, ведущему вверх по файлу просмотра. Например:

Вариант A (который у меня был)

 scss/
├── base
│   └── controller1.scss
├── utils
│   └── utils.scss
└── app
    └── app.scss
  

Где app.scss:

 @import '../base/container1'
@import '../utils/utils'
  

компиляция

sass —watch приложение/app.scss:../css/styles.css

sass —приложение для просмотра: ../css

В обоих случаях sass отслеживает только изменения файла app.scss, но не controller1.scss или utils.scss

Вариант B (решение)

 scss/
├── base
│   └── controller1.scss
├── utils
│   └── utils.scss
└── app.scss
  

Где app.scss:

 @import 'base/container1'
@import 'utils/utils'
  

компиляция

sass —watch app.scss:../css/styles.css

Вариант C (решение) также работает

 scss/
├── base
│   └── controller1.scss
├── utils
│   └── utils.scss
└── app.scss
  

Где app.scss:

 @import 'base/container1'
  

и controller1.scss:

 @import '../utils/utils'
// ...
  

Комментарии:

1. Столкнувшись с той же проблемой в 2020 году с dart sass. Кажется правильным, что он не просматривает пути к файлам, которые требуют перехода выше папки, в которой находится просматриваемый файл. Спасибо!

2. недооцененный ответ. я столкнулся с той же проблемой, когда я импортировал файлы scss над текущим каталогом. В этом случае флаг —watch, похоже, не работает.

Ответ №3:

Для меня это неудовлетворительный ответ, но в итоге я попробовал другой gem, который обрабатывал бы предварительную обработку, guard-livereload , и, хотя сам он не работал, когда я вернулся, чтобы попробовать sass --watch , sass правильно отслеживал мой каталог таблиц стилей на предмет изменений (включая частичные части) и впоследствии перекомпилировал build.scss .

Я не уверен, почему это работает сейчас, но предполагаю, что один из драгоценных камней, установленных вместе с guard или guard-livereload, решил проблему. Возможно listen , или fssm ?

Комментарии:

1. Предупреждение «прослушивание будет опрашивать изменения» исчезло для меня, когда я это сделал sudo gem install listen . Не уверен, что это то, что устранило для вас общую проблему.

2. @EoghanM это, похоже, соответствует тому, что я видел.

Ответ №4:

 interface FileImporter {
  findFileUrl(
    url: string,
    options: {fromImport: boolean}
  ): FileImporterResult | null;
}
  

Комментарии:

1. Добро пожаловать в StackOverflow. Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.