Как включить SCSS-глобус в проект Gatsby?

#sass #gatsby

#sass #gatsby

Вопрос:

В настоящее время я работаю над настройкой шаблона, в котором используется Gatsby. До сих пор все было очень просто и непринужденно в использовании, но, похоже, я не могу решить одну проблему, которая заключается в подключении SCSS glob к моему глобальному стилю SCSS.

В настоящее время у меня есть локализованный стиль SCSS для каждого компонента. Однако у меня также есть каталог styles для моих глобальных стилей (переменные, типографика … и т.д.). В нем также используется SCSS и он отлично работает. Теперь последнее, что я хочу сделать, это заставить SCSS glob работать, чтобы я мог выполнять импорт, подобный /**/*.scss , в моих глобальных стилях.

В настоящее время я использую gatsby-plugin-sass и включил globImporter в качестве опции в свой gatsby-config.js файл. Однако, похоже, это не подходит для меня.

Из того, что я прочитал, node-sass-glob-importer должно быть то, что мне нужно, но пока безуспешно.

Моя конфигурация выглядит следующим образом

 {
   resolve: `gatsby-plugin-sass`,
   options: {
     importer: globImporter(),
     cssLoaderOptions: {
       camelCase: false,
     },
   },
},
  

Затем я пытаюсь выполнить глобальный импорт в свой scss вот так @import "./**/*.scss"; , но я получаю следующую ошибку:

An @import loop has been found:

кто-нибудь настраивал scss glob в gatsby или видел что-нибудь неправильное в моих конфигурациях.

Спасибо

Ответ №1:

Если у вас все еще возникает эта проблема (или на случай, если у кого-то еще есть), вот что сработало для меня:

 options: {
  importer: function(url, prev, done) {
    // url is the path in import as is, which LibSass encountered.
    // prev is the previously resolved path.
    // done is an optional callback, either consume it or return value synchronously.
    // this.options contains this options hash, this.callback contains the node-style callback
    var result = globImporter();
    return {file: result.path, contents: result.data};
  }
},
  

Он был вдохновлен примером кода в node-sass репозитории.

Убедитесь, что он также включен var globImporter = require('node-sass-glob-importer') в верхней части вашего файла.