您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Sass 自定义导入

导入是本教程最后章节了,本章节的也是为了让你进一步了解 Sass 提供的能力,在实际的项目中基本不会用到。在前边的章节中我们详细的讲解了 Sass 的导入 @import 和 @use ,既然已经提供了导入的,导入是什么呢?本节我们来了解一下。

通过前面的讲解我们知道,在 Sass 中可以通过 @import 或 @use 来导入、mixin 和等,它们都接收路径,Sass 会根据其路径来找到对应的。

除此之外 Sass 我们导入器来完成各种我们想要的导入方式,导入的程序可以和普通的系统路径一起放置在 load_paths 数组中。导入除了需要你对计算机系统有所了解外,不同的 Sass 实现需要你有其对应的编程语言功底,所以导入我们只作为了解的。

所有的 Sass 实现都提供了导入的,通过的导入可以控制 @imports 如何定位样式表。

node-sass 是提供了导入器的选项,并将它作为了 JavascriptAPI 的一部分暴露了出来。使用它需要 node-sass v2.0.0 及以上的版本,从 v3.0.3 版本开始导入程序可以返回。我们举个例子来感受下:

var result = sass.renderSync({
  file: '/path/to/file.scss',
  data: 'body{background:blue; a{color:black;}}',
  outputStyle: 'compressed',
  outFile: '/to/my/output.css',
  // 导入
  importer: function(url, prev, done) {
    // url: 路径
    // prev: 上解析路径
    // done: 可选的回调
    myImportFunction(url, prev, function(result){
      done({
        file: result.path,
        contents: result.data
      });
    });
    // OR
    var result = myImportFunction(url, prev);
    return {file: result.path, contents: result.data};
  }
});

从上面的我们可以看到,在 node-sass 的导入是通过 JavascriptAPI 来使用的,也就是我们上面配置的 importer ,importer 可以是也可以是数组, Sass 会按照数组中的顺序依次。

dart-sass 是提供了可扩展的导入器的抽象类( imorter class ),我们用过扩展这个类来实现导入,对于我们前端工程师来说,使用 Dart 语言开发的并不多。不过在前端项目中使用 dart-sass 的话,我们可以使用类似上面 node-sass 的配置,所以这里我们仅举个在前端项目中使用 dart-sass 的例子来看一下:

var sass = require("sass");
var Fiber = require("fibers");
sass.render({
  file: "input.scss",
  importer: function(url, prev, done) {
    // ...
  },
  fiber: Fiber
}, function(err, result) {
  // ...
});

ruby-sass 为我们提供了抽象的基类 Sass::Importers::Base ,我们可以通过它来导入器,扩展的子类的路径名需要使用 URL 格式,不过这需要很强的 Ruby 语言基础,这里我们就暂时不举例子了,否则看着会很迷惑,还有就是 ruby-sass 已经逐渐被官方弃用,所以你仅需要了解下就好。

作为此教程的最后章节,主要的目的是让你更全面的了解 Sass ,这节的导入在我们前端项目中用到的非常非常少,几乎不会出现,不过它也属于 Sass 的能力,我们还是有必要知道的。

在 node-sass 中的导入是我们需要着重了解的,因为我们大多数的前端项目都是引用的它。此教程至此就结束了,希望可以对你应用 Sass 来开发前端的样式有所帮助。


联系我
置顶