sass-site/source/dart-sass.html.haml

134 lines
4.2 KiB
Plaintext
Raw Normal View History

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,
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:
```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:
1. [Install the Dart SDK][install]. Make sure its `bin` directory is [on
your `PATH`][path].
2018-03-17 00:20:00 +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
2. Create a `pubspec.yaml` file like this:
2018-10-24 00:06:39 +02:00
```yaml
name: my_project
dev_dependencies:
sass: ^#{impl_version(:dart)}
```
2018-10-24 00:06:39 +02:00
3. Run `pub get`.
2018-10-24 00:06:39 +02:00
4. Create a `compile-sass.dart` file like this:
2018-10-24 00:06:39 +02:00
```dart
import 'dart:io';
import 'package:sass/sass.dart' as sass;
2018-03-17 00:20:00 +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
5. You can now use this to compile files:
2018-10-24 00:06:39 +02:00
```sh
dart compile-sass.dart styles.scss styles.css
```
2018-10-24 00:06:39 +02: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
[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:
```js
2018-03-17 00:20:00 +01:00
var sass = require('sass');
sass.render({
file: scss_filename
}, function(err, result) {
/* ... */
});
2018-03-17 00:20:00 +01:00
// OR
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
```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) {
// ...
});
```
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