Импорт глобальных пользовательских переменных css

Я пытаюсь использовать webpack с postcss для импорта файла theme-variables.css, который содержит мои пользовательские переменные css.

//theme-variables.css
:root {
    --babyBlue: blue;
}

По сути, я хочу, чтобы любой css, который импортирует переменную темы, мог получить доступ к этим пользовательским свойствам css и преобразовать статические значения с помощью postcss-css-variables.

//style.css
@import "./theme-variable.css";

div {
    display: flex;
    color: var(--babyBlue);
}

становится

//main.css
div {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    color: blue;
}

Однако я продолжаю получать ошибки веб-пакета variable --babyBlue is undefined and used without a fallback

main.js в итоге выглядит так:

:root {
    --babyBlue: blue;
}
div {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    color: undefined;
}

Вот мой веб-пакет (index.js требует styles.js):

const path = require("path");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  entry: { main: "./src/index.js" },
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "[name].js"
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      },
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader
          },
          {
            loader: "css-loader",
            options: { importLoaders: 1 }
          },
          {
            loader: "postcss-loader",
            options: {
              ident: "postcss",
              plugins: loader => [
                require("postcss-css-variables")(),
                require("postcss-cssnext")(),
                require("autoprefixer")(),
                require("postcss-import")()
              ]
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: "[name].css",
      chunkFilename: "[id].css"
    })
  ]
};

person Reed    schedule 06.12.2018    source источник


Ответы (1)


Решение: плагин postcss-import должен быть первым, ОДНАКО плагины для Postcss-loader не идут в обратном порядке, как это делают загрузчики webpack.

Это исправляет это:

loader: "postcss-loader",
options: {
   ident: "postcss",
   plugins: loader => [
      require("postcss-import")()
      require("postcss-css-variables")(),
      require("postcss-cssnext")(),
      require("autoprefixer")(),

   ]
}
person Reed    schedule 06.12.2018