javascript - Gulp - 在子文件夹中编译 scss 文件

标签 javascript gulp gulp-watch gulp-sass

我有运行 gulp 服务器的主文件夹,它包含带有单独文件的项目。我也想让 gulp 监视子文件夹并为其他项目编译 scss 文件,而不仅仅是当前正在运行的项目。我为子文件夹添加“watch”,当我更改子文件夹中的 scss 时,它显示“injected: main.css”,但不会更改“main.css”。

我的文件夹结构:

BASE/scss
    /projects/project1/scss
             /project2/scss
             /projects3/scss

我想基本上可以在 BASE 文件夹上运行 gulp,并在上面显示的所有 scss 文件夹中分别观察和编译所有 .scss 文件 - 对于子文件夹中的基础文件夹和项目。

如何为子文件夹制作 scss -> css 编译?

gulp.task('sass', function () {
    return gulp.src('scss/*.scss')
        .pipe(sass().on('error', sass.logError))
          .pipe(autoprefixer('last 10 versions', '>0.5%'))
        .pipe(gulp.dest('css/'))
        .pipe(browserSync.stream());
});


gulp.task('serve', ['sass'], function () {
    browserSync.init({
        server: ".",
        notify: {
            styles: {
                top: 'auto',
                bottom: '0'
            }
        }
    });

    gulp.watch('scss/*.scss', ['sass']); // main folder
    gulp.watch('./projects/**/scss/*.scss', ['sass']); // added for subfolders, 
   // detects changes in files but doesn't making css output
        });

最佳答案

您所要求的可能意味着很多事情。因此,我将从描述您的 gulp 任务告诉我您正在做什么开始:

您的 gulp 任务将监视立即在 BASE/scss/ 下找到的 .scss 文件的任何更改。以及在任何名为 scss/ 的目录下立即找到的 .scss 文件的更改其中目录是 BASE/projects/ 的子目录(递归) .当检测到这些文件中的任何一个发生更改时,您的“sass”任务将运行,只编译立即在 BASE/scss/ 下找到的 .scss 文件。 (非递归)。它将编译后的 .css 放在 BASE/css/ 中.它不会编译在 BASE/projects/ 下找到的任何文件.

这意味着在 BASE/projects 下找到的任何 .scss 文件除非是@import,否则不会被编译由紧接在 BASE/scss/ 下的文件编辑.

我遇到的第一个问题是您向 gulp.src 提供的内容.看起来像 gulp.src('scss/*.scss')仅包括直接在 BASE/scss/ 下找到的 .scss 文件.

您可以包含BASE/PROJECTS 下的文件通过将其添加到 gulp.src使用调用“sass”任务

gulp.src([
    'scss/*.scss',
    './projects/**/scss/*.scss'
])

根据您的“sass”任务和您描述的目录结构,我重新创建了这个场景。此参数为 gulp.src使用 gulp v3.9.1 完美运行。

我的下一个问题是 main.css 是什么? ?我不希望有一个名为 main.css 的文件输出到BASE/css/除非在 BASE/scss/main.scss 处有文件.

如果所有这些都有效(就像在我的测试中所做的那样)并且您仍然没有看到正在编译的正确文件,则还有其他选项。

您可能希望扩展您的 glob 模式以递归地匹配文件。这可以通过以下模式完成

gulp.src([
    'scss/**/*.scss',
    './projects/**/scss/**/*.scss'
])

gulp.watch('scss/**/*.scss', ['sass']); // main folder
gulp.watch('./projects/**/scss/**/*.scss', ['sass']);

**/*.scss globs 递归地匹配目录下的所有 .scss 文件。 *.scss仅匹配目录下的 .scss 文件。

如果一切都失败了,我建议将编译问题隔离在 gulp.watch 之外.剔除所有无关代码并逐行构建功能以确保您获得适当的结果。

关于javascript - Gulp - 在子文件夹中编译 scss 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212472/

相关文章:

javascript - 添加类时,粘性导航会跳过几个像素

javascript - 当 LineSeries 悬停在上方时获取 QML LineSeries 的名称 - (动态创建的 LineSeries)

javascript - if 语句在 ajax 成功时给出相反的结果

css - 如果更改了其中一个导入,则更新 main.scss 文件

javascript - 如何在 Gulp 中使用 Browserify 丑化输出?

javascript - 如何在脚本中设置正确工作 gulp-deporder 插件的路径?

javascript - gulp - 如何停止或取消任务运行

gulp - 查看 gulp 异常的完整堆栈跟踪

javascript - 使用 js-beautify 和 Gulp 在保存时美化 JS

javascript - 编辑选项仅对在 php 中上传的用户可见