【问题标题】:Gulp watch all .scss files and compile to css as siblings?Gulp 监视所有 .scss 文件并作为兄弟姐妹编译为 css?
【发布时间】:2019-09-19 21:21:24
【问题描述】:

我有一个站点,其中包含一些需要它们的 css 文件彼此分开存在的模块,但我想使用 scss 编写样式以及利用 gulp 进行自动前缀。是否可以监视给定目录树下任何 scss 文件的更改,然后将更新文件的 css 写入同级文件?结构本质上是这样的(尽管它可以将目录嵌套得更深):

Gulpfile.js
module1
- styles1.scss
- styles1.css
- dir
-- styles2.scss
-- styles2.css
module2
- dir
-- subdir
--- styles3.scss
--- styles3.css

我在其他地方有以下 Gulpfile 设置来处理我的一般 scss 编译,但我不确定如何修改它来处理上述情况。

// Requirements 
var postcss = require('gulp-postcss');
var gulp = require('gulp');
var sass = require('gulp-sass');
var sassGlob = require('gulp-sass-glob');
var sourcemaps = require('gulp-sourcemaps');
var autoprefixer = require('gulp-autoprefixer');
var sassOptions = {
  errLogToConsole: true,
  outputStyle: 'expanded'
};

gulp.task('scss', function () {
  return gulp
    .src('scss/style.scss')
    .pipe(sourcemaps.init())
    .pipe(sassGlob())
    .pipe(sass(sassOptions).on('error', sass.logError))
    .pipe(postcss([require('postcss-flexibility')]))
    .pipe(autoprefixer())
    .pipe(sourcemaps.write(''))
    .pipe(gulp.dest('css'))
    .resume();
});

// Create 'watch' task
gulp.task('watch', function () {
  return gulp
    // Watch the input folder for change,
    // and run `sass` task when something happens
    .watch('scss/**/*.scss', gulp.series('scss'))
    // When there is a change,
    // log a message in the console
    .on('change', function (event) {
      console.log('File ' + event + ' was updated' + ', running tasks...');
    })
  ;
});

【问题讨论】:

    标签: css sass gulp


    【解决方案1】:

    在您的scss 任务中,将gulp.src glob 更改为'**/*.scss',并将gulp.dest glob 更改为'.'。

    在您的 watch 任务中,将 glob 也更改为 '**/*.scss'。

    【讨论】:

    • 这很接近,但似乎并没有完成这项工作。直截了当**/*.scss 我遇到了权限问题,因为它似乎正在监视整个机器的文件系统。如果我更新所有内容以使我的 gulpfile.js 与 custom 目录同级,那么我可以使用 custom/**/*.scss 和 custom/. 并且手表按预期运行所有内容。是否可以改用../**/*.scss 或./**/*.scss 之类的东西?如果我尝试其中任何一个,我都会得到Message: node_modules\node-sass\test\fixtures\depth-first\_vars.scss Error: Undefined variable: "$import-counter".。
    • 您可以使用return src(['**/*.scss', '!node_modules/**']) 排除node_modules 文件夹。
    • 嗯,是的,我已经尝试过了,但错误仍然存​​在。知道为什么这可能行不通吗?
    • 我觉得我已经尝试了github.com/gulpjs/gulp/issues/165 中的所有变体,但没有骰子。甚至不包括在手表中。 css 显然是按预期编译的,所以这仍然有效,这个错误比什么都麻烦。
    • 从头开始——让它与src('../**/!node_modules/**/*.scss')一起工作。
    猜你喜欢
    • 1970-01-01
    • 2019-05-06
    • 2021-01-17
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多