Libsass: CSS-модули больше не работают после обновления до node-sass 4.0.0

Созданный на 12 дек. 2016  ·  7Комментарии  ·  Источник: sass/libsass

До обновления (node-sass 1.13.1) без проблем работало:

input.sass

:global
    .my-global-class-name
        background-color: red

Теперь я получаю следующую ошибку:

ERROR in ./~/css-loader?modules&importLoaders=2&camelCase&sourceMap!./~/postcss-loader?sourceMap=inline!./~/sass-loader?sourceMap!./app/styles/modules/resourceForm.sass
Module build failed:
        .my-global-class-name
       ^
      Illegal nesting: Only properties may be nested beneath properties.
      in .../app/styles/modules/resourceForm.sass (line 7, column 9)
 @ ./app/styles/modules/resourceForm.sass 4:14-254 13:2-17:4 14:20-260

информация о версии:

$ node-sass --version
node-sass   4.0.0   (Wrapper)   [JavaScript]
libsass     3.4.0   (Sass Compiler) [C/C++]
  • Версия NPM ( npm -v ): 3.10.3
  • Версия узла ( node -v ): 6.7.0
  • Процесс узла ( node -p process.versions ):
    { http_parser: '2.7.0',
    узел: «6.7.0»,
    v8: «5.1.281.83»,
    уф: '1.9.1',
    zlib: '1.2.8',
    Арес: '1.10.1-DEV',
    ОИТ: '57.1',
    модули: «48»,
    openssl: '1.0.2j' }
  • Платформа узла ( node -p process.platform ): Дарвин
  • Архитектура узла ( node -p process.arch ): x64
  • версия node-sass ( node -p "require('node-sass').info" ):
    node-sass 4.0.0 (оболочка) [JavaScript]
    libsass 3.4.0 (компилятор Sass) [C/C++]
  • версии npm node-sass ( npm ls node-sass ): [email protected]

Самый полезный комментарий

@delijah Я смог снова заставить это работать после обновления, избежав двоеточия, т.е.

\:global
    .my-global-class-name
        background-color: red

Все 7 Комментарий

Этот проект является реализацией языка Sass. Наша цель — быть на 100% совместимым с Sass. Мы закрываем эту проблему, поскольку Ruby Sass выдает тот же результат. В будущем перед открытием проблемы подтвердите, что вывод LibSass отличается от Ruby Sass.

Если вы хотите предложить особенности файловых ошибок на языке Sass, пожалуйста, откройте проблему с Sass - https://github.com/sass/sass

Он компилировался с помощью LibSass из-за исправленной ошибки. Этот код недействителен для Sass и никогда не должен был компилироваться. Вы можете убедиться в этом, протестировав свой код с помощью Ruby Sass.

:global
    .my-global-class-name
        background-color: red
Error: Properties are only allowed within rules, directives, mixin includes, or other properties.
       If ":global" should be a selector, use "\:global" instead.
        on line 1 of test.sass
  Use --trace for backtrace.

Сообщение об ошибке Ruby Sass намного лучше, чем наше, и предлагает обходной путь. Чтобы изменить это поведение, вам нужно открыть запрос функции с Ruby Sass .

Отмечается, что синтаксис модуля CSS действителен в формате scss.

:global {
    .my-global-class-name {
        background-color: red
    }
}

@xzyfer Знаете ли вы, почему :global недействителен в Sass? Это допустимый селектор CSS, и, вероятно, он станет более распространенным в будущем, как только все больше людей будут использовать селектор :host при написании веб-компонентов.

@jhnns здесь есть пара разных элементов. OP использует старый синтаксис с отступом.

:global
    .my-global-class-name
        background-color: red

В этом синтаксисе селекторы :foo имеют особое значение. Это значение предшествует включению селекторов с префиксом : в CSS почти на десятилетие. Как я уже сказал выше, изменение этого поведения не входит в сферу компетенции LibSass и должно решаться официальной командой Sass .

С другой стороны, более новый синтаксис scss гарантирует (в основном) супернабор CSS. По этой причине селекторы с префиксом : работают должным образом.

@delijah Я смог снова заставить это работать после обновления, избежав двоеточия, т.е.

\:global
    .my-global-class-name
        background-color: red

@mattfysh Я могу это подтвердить. Использование «\» решает проблему. Теперь моему sass-linter'у это не нравится ;) Я открою тему по этому поводу.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги