【问题标题】:sass files, compile and seperate theme-color files with gulpsass 文件,使用 gulp 编译和分离主题颜色文件
【发布时间】:2016-05-28 09:09:33
【问题描述】:

我有一个这样的文件夹结构:

|- assets
     |- sass
          global.scss
          _mixin.scss
          _body.scss
          _header.scss
          _footer.scss
          |- themes
               blue.scss
               base.scss
               dark.scss

我想编译我的 sass 文件并从中获取这个 css 结构(最重要的是我想要单独的 css 文件作为我的颜色):

|- assets
     |- cdd
          global.css
          |- themes
               blue.css
               base.css
               dark.css

我正在使用这个 gulpfile.js 文件来编译它

'use strict';

var gulp        = require('gulp'),
concat      = require('gulp-concat'),
plumber     = require('gulp-plumber'),
sass        = require('gulp-sass');

// Gulp plumber error handler
function errorLog(error) {
   console.error.bind(error);
   this.emit('end');
}

// Compile Sass files into CSS
gulp.task('sass', function () {
return gulp.src('./assets/sass/**/*.scss')
            // Sass - Compile Sass files into CSS
            .pipe(sass({
                outputStyle: 'expanded',
                includePaths: ['./assets/sass/']
            }))
      .on('error', errorLog)
            .pipe(gulp.dest('./assets/css'))
 });

gulp.task('default', ['sass']);

它没有为我制作单独的颜色文件,颜色主题文件附加在 global.css 文件的末尾

【问题讨论】:

  • 您可以尝试将您的主题从gulp.src 中排除为return gulp.src(['./assets/sass/**/*.scss', '!./assets/sass/themes/*.scss])。您还需要一个单独的任务来构建您的主题。
  • @andorx 谢谢你的意见;) sass 文件中的 import 命令重要吗?
  • 当然,您必须从您的global.scss 文件中删除所有@import 主题。如果您的主题中需要任何 mixins、vars,您应该在包含这些 mixin 的主题文件夹中创建新文件并将其导入到每个单独的主题文件中。

标签: sass gulp gulp-sass


【解决方案1】:

我为一个项目创建不同主题的方式是像这样拆分我的 scss;

|- scss
|- |- core
|- |- |- _all-my-scss-files-and-folders.scss
|- |- |- _config.scss 
|- |- |- core.scss
|- |- themes
|- |- |- blue.scss
|- |- |- yellow.scss
|- |- |- pink.scss

_config.scss 中,您可以设置默认配色方案

$colour-primary-main: #FFF !default;
$colour-primary-secondary: #EEE !default;
$colour-primary-tetiary: #E0E0E0 !default;
$colour-primary-quaternary: #R4R4R4 !default;

在你的主题 scss 文件中,你覆盖你的变量,然后 @import 你的部分

$colour-primary-main: #333;
$colour-primary-secondary: #000;
$colour-primary-tetiary: #444;
$colour-primary-quaternary: #FEFEFE;

@import '../core/config';
etc

然后你需要设置一个新的 gulp 任务来编译你的主题 SCSS 文件

gulp.task('sass-theme', function () {
  return gulp.src('assets/sass/theme/*.scss')
    .pipe(sass({
      outputStyle: 'expanded',
    }))
    .on('error', errorLog)
    .pipe(gulp.dest('./assets/css'))
});

您还需要忽略默认 scss 任务中的新主题文件夹

gulp.task('sass', function () {
  return gulp.src([
      'assets/sass/**/*.scss',
      '!assets/sass/themes/*.scss';
    ])
    .pipe(sass({
      outputStyle: 'expanded',
    }))
    .on('error', errorLog)
    .pipe(gulp.dest('./assets/css'))
 });

【讨论】:

  • 您的方法适用于包含所有变量的文件,但我认为 Ebrahim 想要为每个颜色主题使用不同的文件,所以删除 !忽略行,然后注意部分 _file.scss 和不带下划线的主文件。
  • @HéctorLeón 不完全确定您在说什么,但即使您没有 _config.scss 文件也可以使用。只要您使用了变量,您就可以覆盖它们。引用 - “但我认为 Ebrahim 想要为每个颜色主题使用不同的文件” - 这就是我的第二个“sass-theme”任务所做的?
  • 对不起,如果我没有正确解释只是说你使用了 |- |- |- _blue.scss |- |- |- _yellow.scss |- |- |- _pink.scss _ 下划线sass 用于部分,它们将被编译成一个单独的文件。只是删除它,因为他想要每个 scss 的 css 文件对吗?但任务很顺利:D
  • @HéctorLeón 啊,是的!谢谢!
猜你喜欢
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多