ZetCode

Gulp Sass

最后修改于 2023 年 10 月 18 日

在本文中,我们将展示如何使用 gulp-sass 插件将 Sass 编译为 CSS。

Gulp

Gulp 是一个 Node 任务运行器。它是前端 Web 开发中的一个流式构建系统。它有助于自动化诸如复制文件、缩小 JavaScript 代码或将 TypeScript 或 CoffeeScript 编译为 JavaScript 等任务。

Sass

Sass 是一种预处理器脚本语言,它被解释或编译为层叠样式表 (CSS)。Sass 有两种语法;旧语法使用缩进分隔代码块,使用换行符分隔规则。

较新的 SCSS 语法使用类似 CSS 的块格式。它使用大括号表示代码块,并使用分号分隔块内的行。缩进语法和 SCSS 文件通常分别使用扩展名 .sass.scss

gulp-sass 插件

gulp-sass 是一个用于将 Sass 编译为 CSS 的 Gulp 插件。它在内部使用 node-sass 模块。

安装 Gulp 和 gulp-sass

我们初始化一个 Node.js 项目并安装 Gulp 和 gulp-sass 插件。

$ npm init -y 
$ npm i --global gulp-cli
$ npm i gulp --save-dev

我们初始化一个 Node 项目并安装 Gulp 和 Gulp CLI。

$ npm i --save-dev gulp-sass
$ npm i --save-dev del

我们安装 gulp-sass 插件和 del 模块,该模块使用 Promise API 删除文件,并支持多个文件和 globbing。

Gulp-sass 示例

以下示例演示了 gulp-sass 模块的用法。

$ mkdir sass
$ mkdir css
$ touch index.html gulpfile.js sass/main.scss

我们创建两个目录和三个空文件。

.
│   gulpfile.js
│   index.html
│   node_modules
│   package-lock.json
│   package.json
│
├───css
└───sass
        main.scss

这是项目结构。index.html 文件使用 CSS 进行布局。CSS 被生成到 css 目录中。SCSS 位于 sass 目录下的 main.scss 文件中。

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/main.css">
    <title>Bugs</title>
</head>
<body>

<div class="container">

    <h1>Bugs</h1>

    <table>

        <tr>
            <th>Bug name</th>
            <th>Description</th>
        </tr>

        <tr>
            <td>Assasin bug</td>
            <td>The assassin bug uses its short three-segmented beak to pierce
                its prey and eat it.</td>
        </tr>

        <tr>
            <td>Bed bug</td>
            <td>Bed bugs are parasitic insects in the that feed exclusively
                on blood.</td>
        </tr>

        <tr>
            <td>Carpet beetle</td>
            <td>Considered a pest of domestic houses and, particularly, natural
                history museums where the larvae may damage natural fibers and
                can damage carpets, furniture, clothing, and insect collections.</td>
        </tr>

        <tr>
            <td>Earwig</td>
            <td>Earwigs are mostly nocturnal and often hide in small, moist
                crevices during the day, and are active at night, feeding on
                a wide variety of insects and plants.</td>
        </tr>

    </table>

</div>

</body>
</html>

这是 index.html 文件。link 标签包含来自 css/main.css 文件的 CSS。

sass/main.scss
$myfont: Georgia 1.2em;
$table_head_col: #ccc;
$table_row_col: #eee;
$table_bor_col: #eee;
$container_width: 700px;
$first_col_width: 150px;

div.container {

    margin: auto; 
    font: $myfont;
    width: $container_width;
}

table {

    tr:nth-child(odd) {background: $table_row_col}

    td:first-child {width: $first_col_width}
  
    th {
        background-color: $table_head_col;
    }

    border: 1px solid $table_bor_col;
}

这是要编译为 CSS 的 SCSS 代码。

gulpfile.js
const gulp = require('gulp');
const sass = require('gulp-sass');
const del = require('del');

gulp.task('styles', () => {
    return gulp.src('sass/**/*.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest('./css/'));
});

gulp.task('clean', () => {
    return del([
        'css/main.css',
    ]);
});

gulp.task('default', gulp.series(['clean', 'styles']));

这是包含我们的 Gulp 任务的 gulpfile.js

gulp.task('styles', () => {
    return gulp.src('sass/**/*.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest('./css/'));
});

gulp.task() 创建一个新任务,我们称之为 stylesgulp.src() 创建一个用于读取所有 SCSS 文件的流。通过 pipe(),我们将流式数据传递给 sass 编译器。最后,我们将编译后的数据传递给 gulp.dest(),它进而创建一个将数据写入文件系统的流。

gulp.task('clean', () => {
    return del([
        'css/main.css',
    ]);
});

clean 任务会删除生成的 CSS 文件。

gulp.task('default', gulp.series(['clean', 'styles']));

默认任务是在不指定 Gulp CLI 任务名时执行的任务。它按顺序运行 cleanstyles 任务。

$ gulp
[13:07:10] Using gulpfile ~\Documents\js\gulpsass\gulpfile.js
[13:07:10] Starting 'default'...
[13:07:10] Starting 'clean'...
[13:07:10] Finished 'clean' after 4.11 ms
[13:07:10] Starting 'styles'...
[13:07:11] Finished 'styles' after 14 ms
[13:07:11] Finished 'default' after 23 ms

我们运行默认任务。CSS 文件已生成。

Gulp watch 任务

我们可以使用 gulp.watch() 来自动监视更改。

gulp.task('watch', () => {
    gulp.watch('sass/**/*.scss', (done) => {
        gulp.series(['clean', 'styles'])(done);
    });
});

请注意,监视文件可能会占用大量资源;因此,我们应该谨慎使用 gulp.watch()

在本文中,我们使用 Gulp 将 SCSS 代码编译为 CSS。

您可能还对以下相关教程感兴趣:Node Sass 教程Gulp 缩小教程Datatables JSON Server 教程Handsontable 教程

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。