将 postcss-conditionals 与 mixins 一起使用

Using postcss-conditionals with mixins

我在将 postcss 条件句转换为 css 时遇到问题。我正在使用 gulp 来处理文件并输出一个 css 文件。在我尝试转换条件(见下文)之前,一切似乎都在进行中。

这是我的 gulp 文件:

const postcss = require('gulp-postcss');
const gulp = require('gulp');
const rename = require('gulp-rename');

gulp.task('generate-css', function () {
  var plugins = [
    require('postcss-import'),
    require('postcss-mixins'),
    require('postcss-nested'),
    require('postcss-simple-vars'),
    require('postcss-calc'),
    require('postcss-conditionals'),
    // require('cssnano'), -> commented out so that I can see what is being converted correctly
  ];
  return gulp
    .src('./src/pages/test/*.css')
    .pipe(postcss(plugins))
    .pipe(
      rename(function (path) {
        path.dirname = './src/pages/' + path.dirname;
        path.basename = 'testingStyles.module';
        path.extname = '.css';
      }),
    )
    .pipe(gulp.dest('.'));
});

这是我的 postcss 文件的简化版本:

@import '../../theme/_mixins.css';
@import '../../theme/_variables.css';

.myClass {
  @mixin mixinOne;
  @mixin mixinTwo bottom, 10;

  &__icon {
    @mixin SVG logo_url, $my-color;
  }
}

我遇到的(我认为)问题是在 postcss-conditionals 尝试删除 @if 语句之前未处理混音(导入的)。

这给了我这个错误:

postcss-conditionals: .../_mixins.css:4:3: Failed to parse expression
  3 | @define-mixin mixinOne $paramOne, $paramTwo {
> 4 |   @if $direction == all {
    |   ^
  5 |     margin: calc($spacer * $(factor));
  6 |   }

如果我删除 postcss-conditionals 插件,我会得到一个 css 文件,其中成功应用了列表中所有以前的插件(没有嵌套、正确替换变量、转换计算等)。如果我删除 postcss-conditionals 插件,输出 css 文件中没有 @define-mixins

对于如何确保在 @define-mixins 尝试删除条件之前对其进行处理,我有点不知所措(插件的顺序 似乎 对我来说是正确的)。

如果有人知道我做错了什么,将不胜感激!

也许有一些方法可以分两次处理插件?例如。先['postcss-import', 'postcss-mixins'],然后剩下的?那至少会(反)证明你的理论