【问题标题】:Laravel elixir and autoprefixerLaravel 长生不老药和自动前缀
【发布时间】:2015-12-07 01:20:50
【问题描述】:

所以我看到 elixir 不会自动使用 autoprefixer。这是我的 gulp 文件的外观:

var Elixir = require('laravel-elixir');
var autoprefixer = require('gulp-autoprefixer');
var gulp = require('gulp');

Elixir.config.sourcemaps = false;

gulp.task('sass', function() {
    return gulp.src('resources/sass/app.scss')
        .pipe(autoprefixer({
            browsers: ['last 2 versions'],
            cascade: false
        }))
        .pipe(gulp.dest('public/css/app.css'));
});

Elixir(function(mix) {

    // Copy bootstrap.min.js to node vendor directory until it becomes a node module
    mix.copy('public/vendor/bootstrap-4', 'node_modules/bootstrap-4');

    // Combine all vendor scripts
    mix.scripts([
        'bootstrap-4/dist/js/bootstrap.min.js',
        'vue/dist/vue.min.js'
    ], 'public/js/vendor.js', 'node_modules');

    // Combine all files into one single CSS file
    mix.task('sass', 'resources/sass/**/*.scss');

    // Get rid of cached version
    mix.version([
        'public/js/vendor.js',
        'public/css/app.css'
    ]);

});

但它仍然没有发出自动前缀。我没有大吃一惊的错误。当我运行gulp watch 时,它不会在我更新 .scss 文件时更新。我所有的 sass 文件都位于 resources/sass 下

感谢您的帮助!

我什至尝试过:

new Task('sass', function() {
    return gulp.src('resources/sass/app.scss')
        .pipe(autoprefixer({
            browsers: ['last 2 versions'],
            cascade: false
        }))
        .pipe(gulp.dest('public/css/app.css'));
})
.watch('resources/sass/**/*.scss');

【问题讨论】:

  • 既然 Bootstrap 4 已经编译了 CSS,为什么不直接包含呢?否则,您可以使用mix.sass() 函数来代替创建新任务。 Laravel Elixir 会自动使用 autoprefixer,除非你也禁用它。请参阅以下Gulpfile.js 示例:gist.github.com/divspace/3f952754581babb21c5b
  • 我喜欢 Laravel 文档让我们独自一人。 Autoprefixer 上没有任何文档,但我已经在 #372 中要求了

标签: laravel gulp gulp-sass laravel-elixir autoprefixer


【解决方案1】:

使用这个配置

var elixir = require('laravel-elixir');
config.css.autoprefix.options.browsers =  ['last 15 versions'] ;

elixir(function(mix) {
    mix.sass('index.scss');
});

【讨论】:

    【解决方案2】:

    尽管currentlyundocumented,Laravel 的 Elixir 确实通过 Autoprefixer 运行你的 CSS,它主要是默认设置,如包的 Config.js 中所示:

    {
        ...
        css: {
            autoprefix: {
                enabled: true,
    
                options:  {
                    browsers: ['last 2 versions'],
                    cascade: false
                }
            },
        }
    }
    

    要自定义该配置,您应该使用以下内容:

    elixir.config.css.autoprefix = {
        enabled: true, //default, this is only here so you know how to disable
        options: {
            cascade: true,
            browsers: ['last 2 versions', '> 1%']
        }
    };
    
    elixir(function(mix) {
        ...
    });
    

    【讨论】:

      【解决方案3】:

      您的gruntfile.js 应如下所示:

      var elixir = require('laravel-elixir');
      
      elixir(function(mix) {
        mix
          .copy('./public/vendor/bootstrap-4', './node_modules/bootstrap-4')
          .sass('app.scss')
          .scripts([
            './node_modules/bootstrap-4/dist/js/bootstrap.js'
            './node_modules/vue/dist/vue.js'
          ], './public/js/app.js')
          .version([
            'css/app.js',
            'js/app.css'
          ]);
      });
      

      您的resources/assets/sass/app.scss 文件应如下所示:

      @import "node_modules/bootstrap-4/scss/bootstrap";
      

      您现在将拥有这样的目录结构:

      public/build/css/app-**********.css
      public/build/css/app.css.map
      public/build/js/app-**********.js
      public/build/js/app.js.map
      public/css/app.css
      public/css/app.map
      public/js/app.js
      public/js/app.map.js
      

      星号为[a-z0-9]{10},但您可以通过调用{{ elixir('css/app.css') }}{{ elixir('js/app.js') }} 来加载它们。

      【讨论】:

      • 你是在回答这个问题还是试图教这个人正确的标记?
      猜你喜欢
      • 2016-02-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多