【问题标题】:gulp-postcss: conditional options (optimizations)gulp-postcss:条件选项(优化)
【发布时间】:2018-05-02 15:13:00
【问题描述】:

我学习了list of cssnano optimizations:它包括autoprefixer(不是默认)、cssnano-util-raw-cache等。

接下来我查看gulp-postcss documentation:它有以下示例:

var postcss = require('gulp-postcss');
var gulp = require('gulp');
var autoprefixer = require('autoprefixer');
var cssnano = require('cssnano');

gulp.task('css', function () {
    var plugins = [
        autoprefixer({browsers: ['last 1 version']}),
        cssnano()
    ];
    return gulp.src('./src/*.css')
        .pipe(postcss(plugins))
        .pipe(gulp.dest('./dest'));
});

好吧,虽然有人说autoprefixercssnano 优化之一,但在上面的示例中它是单独定义的。但是,我无法从上面的示例中理解如何从第一个链接(cssnano 优化列表)设置所需的优化。

E. G。我想在开发和生产版本中使用postcss-calc,但是我只需要在生产版本中使用postcss-normalize-whitespace。我应该如何完成以下代码?

const   gulp = require('gulp'),
        gulpIf = require('gulp-if'),
        sass = require('gulp-sass'),
        postcss = require('gulp-postcss');

const isDevelopment = !process.env.NODE_ENV || process.env.NODE_ENV === 'develpment';

gulp.task('styles', function(){

    // first the optimizations for both Development and production
    let plugins = [
        autoprefixer({ browsers: ['>= 1%', 'last 5 major versions', 'ie >= 6']}),
        // ...
    ];

    if (isDevelopment) {
        plugins.push(/* plugins for development build */);
    }
    else {
        plugins.push(/* plugins for production build */);   
    }

    return gulp.src(HPath.sassSourceFilesSelection)
        .pipe(gulpIf(isDevelopment, sourcemaps.init()))
        .pipe(sass())
        .pipe(postcss(plugins))

        // ...

});

【问题讨论】:

  • 你最后想出一个好办法来处理这个问题吗?
  • @Ian,是的。示例:!options.isDevelopment ? require('postcss-normalize-whitespace')() : false
  • 嗯,它如何适合插件数组?
  • @Ian,我用代码示例添加了答案。

标签: gulp postcss cssnano


【解决方案1】:
let PostCssPlugins = [
    // non-conditional
    require('cssnano-util-raw-cache')(), 
    // conditional
    !options.isDevelopment ? require('postcss-normalize-whitespace')() : false
].filter(Boolean);

return gulp.src(sassFilesSelection)
    .pipe(plugins.sass())
    .pipe(plugins.postcss(PostCssPlugins))
    .pipe(gulp.dest(outputPath));

【讨论】:

  • 啊,我明白了,您正在通过布尔结果过滤插件数组。谢谢。
  • @lan,完全没有 ^^ 这不是我自己的解决方案,我不记得了,我在哪里得到了答案,也许在 GitHub 上(目前已关闭 500 多个 postcss)。
猜你喜欢
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2016-05-26
  • 2020-05-13
  • 1970-01-01
相关资源
最近更新 更多