2018-03-17 00:20:00 +01:00
|
|
|
---
|
|
|
|
title: Dart Sass
|
2019-03-04 23:03:41 +01:00
|
|
|
no_container: true
|
2018-10-24 00:06:39 +02:00
|
|
|
introduction: >
|
2018-03-17 00:20:00 +01:00
|
|
|
Dart Sass is the primary implementation of Sass, which means it gets new
|
|
|
|
features before any other implementation. It's fast, easy to install, and it
|
|
|
|
compiles to pure JavaScript which makes it easy to integrate into modern web
|
|
|
|
development workflows. Find out more or help out with its development on
|
2018-10-24 00:06:39 +02:00
|
|
|
[GitHub](https://github.com/sass/dart-sass).
|
|
|
|
---
|
2018-03-17 00:20:00 +01:00
|
|
|
|
2019-03-04 23:03:41 +01:00
|
|
|
.sl-l-grid.sl-l-grid--full.sl-l-large-grid--fit.sl-l-large-grid--gutters-large
|
|
|
|
.sl-l-grid__column
|
2018-03-17 00:20:00 +01:00
|
|
|
:markdown
|
2018-10-24 00:06:39 +02:00
|
|
|
## Command Line
|
2018-03-17 00:20:00 +01:00
|
|
|
|
|
|
|
Dart Sass's stand-alone command-line executable uses the blazing-fast Dart
|
|
|
|
VM to compile your stylesheets. To install Dart Sass on the command line,
|
2018-12-28 02:32:59 +01:00
|
|
|
check out the #{link_to "installation instructions", "/install"}. Once
|
2018-03-17 00:20:00 +01:00
|
|
|
you've got it running, you can use it compile files:
|
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
```sh
|
|
|
|
sass source/index.scss css/index.css
|
|
|
|
```
|
2018-03-17 00:20:00 +01:00
|
|
|
|
|
|
|
See `sass --help` for additional information on the command-line
|
|
|
|
interface.
|
|
|
|
|
2019-12-13 04:26:12 +01:00
|
|
|
### Dart Library
|
2018-03-17 00:20:00 +01:00
|
|
|
|
|
|
|
You can also use Dart Sass as a Dart library to get the speed of the Dart
|
|
|
|
VM plus the ability to define your own functions and importers. To add it
|
|
|
|
to an existing project:
|
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
1. [Install the Dart SDK][install]. Make sure its `bin` directory is [on
|
|
|
|
your `PATH`][path].
|
2018-03-17 00:20:00 +01:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
[install]: https://www.dartlang.org/install#automated-installation-and-updates
|
|
|
|
[path]: https://katiek2.github.io/path-doc/
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
2. Create a `pubspec.yaml` file like this:
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
```yaml
|
|
|
|
name: my_project
|
|
|
|
dev_dependencies:
|
|
|
|
sass: ^#{impl_version(:dart)}
|
|
|
|
```
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
3. Run `pub get`.
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
4. Create a `compile-sass.dart` file like this:
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
```dart
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:sass/sass.dart' as sass;
|
2018-03-17 00:20:00 +01:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
void main(List<String> arguments) {
|
|
|
|
var result = sass.compile(arguments[0]);
|
|
|
|
new File(arguments[1]).writeAsStringSync(result);
|
|
|
|
}
|
|
|
|
```
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
5. You can now use this to compile files:
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
```sh
|
|
|
|
dart compile-sass.dart styles.scss styles.css
|
|
|
|
```
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
6. Learn more about [writing Dart code][dart] (it's easy!) and about
|
|
|
|
[Sass's Dart API][sass].
|
2018-03-17 00:20:00 +01:00
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
[dart]: https://www.dartlang.org/guides/language/language-tour
|
|
|
|
[sass]: https://www.dartdocs.org/documentation/sass/latest/sass/compile.html
|
2018-03-17 00:20:00 +01:00
|
|
|
|
2019-03-04 23:03:41 +01:00
|
|
|
.sl-l-grid__column
|
2018-03-17 00:20:00 +01:00
|
|
|
:markdown
|
2018-10-24 00:06:39 +02:00
|
|
|
## JavaScript Library
|
2018-03-17 00:20:00 +01:00
|
|
|
|
|
|
|
Dart Sass is also distributed as the pure JavaScript [`sass`
|
|
|
|
package](https://npmjs.com/package/sass) on npm. The pure JS version is
|
|
|
|
slower than the stand-alone executable, but it's easy to integrate into
|
|
|
|
existing workflows and it allows you to define custom functions and
|
|
|
|
importers in JavaScript. You can add it to your project using
|
|
|
|
`npm install --save-dev sass` and `require()` it as a library:
|
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
```js
|
2018-03-17 00:20:00 +01:00
|
|
|
var sass = require('sass');
|
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
sass.render({
|
|
|
|
file: scss_filename
|
|
|
|
}, function(err, result) {
|
|
|
|
/* ... */
|
|
|
|
});
|
2018-03-17 00:20:00 +01:00
|
|
|
|
|
|
|
// OR
|
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
var result = sass.renderSync({
|
|
|
|
file: scss_filename
|
|
|
|
});
|
|
|
|
```
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2018-03-17 00:20:00 +01:00
|
|
|
When installed via npm, Dart Sass supports a JavaScript API that aims to
|
|
|
|
be compatible with [Node Sass](https://github.com/sass/node-sass#usage).
|
|
|
|
Full compatibility is a work in progress, but Dart Sass currently supports
|
|
|
|
the `render()` and `renderSync()` functions. Note however that by default,
|
|
|
|
**`renderSync()` is more than twice as fast as `render()`**, due to the
|
|
|
|
overhead of asynchronous callbacks.
|
|
|
|
|
|
|
|
To avoid this performance hit, `render()` can use the [`fibers`][fibers]
|
|
|
|
package to call asynchronous importers from the synchronous code path. To
|
|
|
|
enable this, pass the `Fiber` class to the `fiber` option:
|
|
|
|
|
|
|
|
[fibers]: https://www.npmjs.com/package/fibers
|
|
|
|
|
2019-03-05 02:46:32 +01:00
|
|
|
```js
|
2018-03-17 00:20:00 +01:00
|
|
|
var sass = require("sass");
|
|
|
|
var Fiber = require("fibers");
|
|
|
|
|
|
|
|
sass.render({
|
|
|
|
file: "input.scss",
|
|
|
|
importer: function(url, prev, done) {
|
|
|
|
// ...
|
|
|
|
},
|
|
|
|
fiber: Fiber
|
|
|
|
}, function(err, result) {
|
|
|
|
// ...
|
|
|
|
});
|
2019-03-05 02:46:32 +01:00
|
|
|
```
|
2018-10-24 00:06:39 +02:00
|
|
|
|
2018-03-17 00:20:00 +01:00
|
|
|
See [Dart Sass's documentation][js api] for more information about its
|
|
|
|
JavaScript API.
|
|
|
|
|
|
|
|
[js api]: https://github.com/sass/dart-sass/blob/master/README.md#javascript-api
|