【问题标题】:gulp: How do i pipe a css file in between scss files? gulp.src(['sassfile1.scss', 'cssfile.css' ,'sassfile2.scss'])gulp:如何在 scss 文件之间通过管道传输 css 文件? gulp.src(['sassfile1.scss', 'cssfile.css' ,'sassfile2.scss'])
【发布时间】:2018-03-21 14:48:18
【问题描述】:

这是我当前在 gulpfile.js 中的代码部分:

// Sass 
gulp.task('sass', function () {
  gulp.src(['./node_modules/bootstrap/scss/bootstrap.scss', './node_modules/startbootstrap-full-slider/css/full-slider.css' ,'./sass/**/*.scss'])
    .pipe(sourcemaps.init())
        .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
        .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(sourcemaps.write('./'))
    .pipe(concat('style.css'))
    .pipe(gulp.dest('./'));
});

我正在尝试在两者之间添加“full-slider.css”文件,以缩小和合并(按此顺序)。

full-slider.css 的内容不会添加到最终的style.css

编辑:

尝试使用gulp-cssnano: 这样:

var gulp = require('gulp');
var livereload = require('gulp-livereload')
var uglify = require('gulp-uglifyjs');
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');
var sourcemaps = require('gulp-sourcemaps');
var imagemin = require('gulp-imagemin');
var pngquant = require('imagemin-pngquant');
var fs = require('fs');
var concat = require('gulp-concat');
var cssnano = require('gulp-cssnano');

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

    gulp.src(['./node_modules/bootstrap/scss/bootstrap.scss', './sass/**/*.scss'])
    .pipe(sourcemaps.init())
        .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
        .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(sourcemaps.write('./'))
    .pipe(concat('style.css'))
    .pipe(gulp.dest('./'));

    gulp.src(['style.css', './node_modules/startbootstrap-full-slider/css/full-slider.css'])
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(cssnano())
    .pipe(concat('style.css'))
    .pipe(gulp.dest('./'));

});

一饮而尽

[16:11:45] 使用 gulpfile /var/www/test.dev/wp-content/themes/olympos/gulpfile.js [16:11:45] 开始“sass”... [16:11:45] 23 毫秒后完成“sass”

events.js:141 投掷者; // 未处理的“错误”事件 ^ CssSyntaxError: /var/www/test.dev/wp-content/themes/olympos/bootstrap.scss:1:0: 缺少分号> 1 | /*! | ^ 2 | * 引导 v4.0.0-alpha.6 (https://getbootstrap.com) 3 | * 版权所有 2011-2017 引导程序 作者

当我评论该部分时:

    gulp.src(['style.css', './node_modules/startbootstrap-full-slider/css/full-slider.css'])
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(cssnano())
    .pipe(concat('style.css'))
    .pipe(gulp.dest('./'));

它编译顺利,我的错误在哪里?

(理论:这可能是因为生成的新 css 文件中 sourcemap 的输出而发生的吗?)

【问题讨论】:

  • 确保文件位于该目录
  • gulp-sass 是否支持原生 CSS 文件?如果不是,我会使用gulp.dest() 将 CSS 文件复制到项目文件中的其他位置(不能更改 node_modules 中的内容),将名称设置为 .scss(因为任何 CSS 文件都是有效的 Sass),然后使用新路径再次运行任务。
  • 或者,您可以将文件作为concat 任务包含在任务的下方,然后使用与 Sass 任务分开的 autoprefixer,然后在包含所有文件后运行 uglify。
  • @TomOakley 第一个解决方案有效。你能告诉我一个如何应用这个 concat 修复的简单例子吗?
  • 将其添加到另一个任务而不是 scss 任务。我的意思是创建一个新任务。

标签: css sass gulp gulp-sass


【解决方案1】:

最初我认为最好的方法是将 CSS 文件复制到项目文件中的新位置(使用gulp.dest()),将文件名设置为具有.scss 扩展名,然后运行gulp.sass()再次管道。

但是,这并没有真正使用 gulp-sass,因为它应该被使用(它不是文件连接器)。更好的方法是做这样的事情(请记住,我没有时间实际测试这个,所以它可能不起作用。道歉。):

gulp.task('sass', function () {
  gulp.src(['./node_modules/bootstrap/scss/bootstrap.scss', './sass/**/*.scss'])
  .pipe(sourcemaps.init())
  .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
  .pipe(sourcemaps.write('./'))
  .pipe(concat('style.css'))
  .pipe(gulp.dest('./'));
  gulp.src(['style.css', './node_modules/startbootstrap-full-slider/css/full-slider.css'])
  .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
  .pipe(cssnano())
  .pipe(concat('style.css'))
  .pipe(gulp.dest('./'));
});

这可能并不完美,而且我在写这篇文章时也意识到您希望将 fullslider.css 文件包含在 bootstrap 之后但在您的项目文件之前。此外,这不会将源映射用于第二个子任务。正如您可能知道的那样,我已经有一段时间没有编写 gulp 任务了!但如果你有时间,也许可以玩玩。

P.S cssnano() 指的是gulp-cssnano

【讨论】:

  • 我安装了gulp-cssnanp 并按照您的描述应用它(我将使用代码编辑我的主要帖子) - 我收到一个错误:gulp sass [16:11:45] Using gulpfile /var/www/test.dev/wp-content/themes/olympos/gulpfile.js [16:11:45] Starting 'sass'... [16:11:45] Finished 'sass' after 23 ms events.js:141 throw er; // Unhandled 'error' event ^ CssSyntaxError: /var/www/test.dev/wp-content/themes/olympos/bootstrap.scss:1:0: Missed semicolon> 1 | /*! | ^ 2 | * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com) 3 | * Copyright 2011-2017 The Bootstrap Authors
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多