web-dev-qa-db-fra.com

Gulp-sass ne compile pas correctement Foundation 6

J'ai des problèmes avec Foundation 6 fichiers, pour certaines raisons, ils n'incluent tout simplement pas tous les composants sass. J'ai essayé d'utiliser Foundation 5 et cela a bien fonctionné. 

Voici ma tâche d'avance:

gulp.task('styles', ['clearCss'], function() {
    gulp.src('assets/sass/app.scss')
        .pipe(plumber(plumberErrorHandler))
        .pipe(sourcemaps.init())
        .pipe(sass({
            outputStyle: 'compressed'
        })
        .on('error', notify.onError(function(error) {
            return "Error: " + error.message;
        }))
        )
        .pipe(autoprefixer({
            browsers: ['last 2 versions', 'ie >= 9']
        }))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('./assets/dist/css')) 
        .pipe(browserSync.stream({match: '**/*.css'}))
        .pipe(notify({
            message: "Styles task complete!"
        }));
});

Et voici mon app.scss:

// Import Foundation
@import "../components/foundation/scss/foundation";

Cela fonctionne avec mes propres fichiers sass, mais en ignorant complètement les éléments de base.

12
user3586478

Vous devez importer un fichier foundation-sites.scss et non scss/foundation.scss. Le fichier foundation.scss n'a qu'un @mixin foundation-everything qui est inclus dans foundation-sites.scss:

@include foundation-everything;

Cependant, foundation-sites.scss a une erreur dans la version 6.0.4, voici mon journal:

Error in plugin 'sass'
Message:
    bower_components\foundation-sites\foundation-sites.scss
Error: File to import not found or unreadable: foundation
       Parent style sheet: stdin
        on line 1 of stdin
>> @import 'foundation';

Le correctif:

Changer la ligne n ° 1 du fichier foundation-sites.scss de @import 'foundation'; à @import 'scss/foundation';

13
Tomasz Rozmus

L’approche correcte pour la fondation 6:  

si vous regardez le fichier foundation.scss ( https://github.com/zurb/foundation-sites-6/blob/develop/scss/foundation.scss )

Oui, tous les composants requis sont importés, mais comme ils sont maintenant mixins et non normaux, vous devez indiquer explicitement que vous souhaitez les utiliser, simplement en appelant le mixin.

app.scss

@import 'foundation';
@include foundation-everything; // Very important if you want to include all of foundation css to your complied css

gulpfile.js

gulp.task('scss', function() {
    return gulp.src('app.scss')
        .pipe(plugins.sass(
           {includePaths: ['./node_modules/foundation-sites/scss']}
        ))
        .pipe(gulp.dest('css'))
        .pipe(plugins.notify({ message: 'Sass task complete' }));
});
10
Jimmy Obonyo Abor

J'ai gulp-sass travaillant avec des sites de fondation (Foundation 6):

Mon fichier main.scss:

@charset 'UTF-8';
/**
 * Main SCSS
 * Version 1.0.0
 * built with foundation-sites
 */

// import custom settings
@import 'settings';

// import foundation sass
@import "../bower_components/foundation-sites/scss/foundation";

/* either include all foundation components…  //*/
@include foundation-everything;

/* or include specific foundation components //*/
// @include foundation-global-styles;
  /* include either foundation-grid… //*/
// @include foundation-grid;
  /* or foundation-flex-grid (but don't include both) //*/
// @include foundation-flex-grid;
// @include foundation-typography;
// @include foundation-button;
// @include foundation-forms;
// @include foundation-visibility-classes;
// @include foundation-float-classes;
// @include foundation-accordion;
// @include foundation-accordion-menu;
// @include foundation-badge;
// @include foundation-breadcrumbs;
// @include foundation-button-group;
// @include foundation-callout;
// @include foundation-close-button;
// @include foundation-drilldown-menu;
// @include foundation-dropdown;
// @include foundation-dropdown-menu;
// @include foundation-flex-video;
// @include foundation-label;
// @include foundation-media-object;
// @include foundation-menu;
// @include foundation-off-canvas;
// @include foundation-orbit;
// @include foundation-pagination;
// @include foundation-progress-bar;
// @include foundation-slider;
// @include foundation-sticky;
// @include foundation-reveal;
// @include foundation-switch;
// @include foundation-table;
// @include foundation-tabs;
// @include foundation-thumbnail;
// @include foundation-title-bar;
// @include foundation-tooltip;
// @include foundation-top-bar;

Si vous ne voulez pas charger tous les composants de base, vous n’êtes pas obligé. Au lieu de @include foundation-everything, simplement @include les composants spécifiques dont vous avez besoin.

2
Roman Edirisinghe

Ce que j'ai fait avec ma configuration gulp + bower: /src/scss/app.scss @import 'settings'; @import '../../bower_components/foundation-sites/scss/foundation'; @include foundation-everything; settings.scss contenait mes substitutions de variable de base, CSS personnalisé, etc. L'astuce pour moi consistait à @import chemin complet du fichier, puis @include le mixin.

Bien qu'il soit excessif d'inclure tout, je préfère développer sans soucis, puis utiliser uncss pour nettoyer le code CSS mort.

1
tomByrer

J'ai dû modifier le fichier bower.json des sites de la fondation pour modifier la fondation main.scss @import.

De:

"main": [
    "scss/foundation.scss",
    "js/foundation.js"
],

À:

"main": [
    "foundation-sites.scss",
    "js/foundation.js"
  ],

Ainsi que le fichier foundation-sites.scss.

@import 'foundation';

À:

@import 'scss/foundation.scss';

Je ne pense pas que ce soit la meilleure voie à suivre, mais mes connaissances sass, grunt et bower sont limitées.

0
Randy Collier

Si vous avez un fichier gulp, incluez 'node_modules/foundation-sites/scss', puis dans votre application.scss ou style.scss, procédez comme suit:

@import "settings/settings";
@import "foundation";
@include foundation-everything;

De cette façon, vous importerez TOUT ce que Foundation a à offrir. Bien sûr, tout peut être un peu exagéré, mais c'est un choix facultatif.

Exemple de tâche d'abat:

gulp.task('css', function() {
    return gulp.src(assets + 'scss/*.scss')
        .pipe(sass({
                includePaths: 'node_modules/foundation-sites/scss',
                errLogToConsole: true
            }))
            .on('error', handleError)
        .pipe(prefixer())
        .pipe(gulp.dest(themeDir))
        .pipe(browserSync.stream());
});

Bien sûr, handleError doit être défini. Dans mon cas, c'est défini comme:

var handleError = function(err) {
  if (err) {
    var args = Array.prototype.slice.call(arguments);
    console.log(args);
    this.emit('end');
  }
};

N'oubliez pas d'inclure les dépendances requises.

0
Marcus Ekström