UNPKG

7.91 kBMarkdownView Raw
1A pure JavaScript implementation of [Sass][sass]. **Sass makes CSS fun again**.
2
3<table>
4 <tr>
5 <td>
6 <img width="118px" alt="Sass logo" src="https://rawgit.com/sass/sass-site/master/source/assets/img/logos/logo.svg" />
7 </td>
8 <td valign="middle">
9 <a href="https://www.npmjs.com/package/sass"><img width="100%" alt="npm statistics" src="https://nodei.co/npm/sass.png?downloads=true"></a>
10 </td>
11 <td valign="middle">
12 <a href="https://github.com/sass/dart-sass/actions"><img alt="GitHub actions build status" src="https://github.com/sass/dart-sass/workflows/CI/badge.svg"></a>
13 <br>
14 <a href="https://ci.appveyor.com/project/nex3/dart-sass"><img alt="Appveyor build status" src="https://ci.appveyor.com/api/projects/status/84rl9hvu8uoecgef?svg=true"></a>
15 </td>
16 </tr>
17</table>
18
19[sass]: https://sass-lang.com/
20
21This package is a distribution of [Dart Sass][], compiled to pure JavaScript
22with no native code or external dependencies. It provides a command-line `sass`
23executable and a Node.js API.
24
25[Dart Sass]: https://github.com/sass/dart-sass
26
27* [Usage](#usage)
28* [See Also](#see-also)
29* [Behavioral Differences from Ruby Sass](#behavioral-differences-from-ruby-sass)
30
31## Usage
32
33You can install Sass globally using `npm install -g sass` which will provide
34access to the `sass` executable. You can also add it to your project using
35`npm install --save-dev sass`. This provides the executable as well as a
36library:
37
38[npm]: https://www.npmjs.com/package/sass
39
40```js
41const sass = require('sass');
42
43const result = sass.compile(scssFilename);
44
45// OR
46
47// Note that `compileAsync()` is substantially slower than `compile()`.
48const result = await sass.compileAsync(scssFilename);
49```
50
51See [the Sass website][js api] for full API documentation.
52
53[js api]: https://sass-lang.com/documentation/js-api
54
55### Legacy API
56
57Dart Sass also supports an older JavaScript API that's fully compatible with
58[Node Sass] (with a few exceptions listed below), with support for both the
59[`render()`] and [`renderSync()`] functions. This API is considered deprecated
60and will be removed in Dart Sass 2.0.0, so it should be avoided in new projects.
61
62[Node Sass]: https://github.com/sass/node-sass
63[`render()`]: https://sass-lang.com/documentation/js-api/modules#render
64[`renderSync()`]: https://sass-lang.com/documentation/js-api/modules#renderSync
65
66Sass's support for the legacy JavaScript API has the following limitations:
67
68* Only the `"expanded"` and `"compressed"` values of [`outputStyle`] are
69 supported.
70
71* Dart Sass doesn't support the [`precision`] option. Dart Sass defaults to a
72 sufficiently high precision for all existing browsers, and making this
73 customizable would make the code substantially less efficient.
74
75* Dart Sass doesn't support the [`sourceComments`] option. Source maps are the
76 recommended way of locating the origin of generated selectors.
77
78[`outputStyle`]: https://sass-lang.com/documentation/js-api/interfaces/LegacySharedOptions#outputStyle
79[`precision`]: https://github.com/sass/node-sass#precision
80[`sourceComments`]: https://github.com/sass/node-sass#sourcecomments
81
82### From Pub
83
84If you're a Dart user, you can install Dart Sass globally using `pub global
85activate sass`, which will provide a `sass` executable. You can also add it to
86your pubspec and use it as a library. We strongly recommend importing it with
87the prefix `sass`:
88
89```dart
90import 'package:sass/sass.dart' as sass;
91
92void main(List<String> args) {
93 print(sass.compile(args.first));
94}
95```
96
97See [the Dart API docs][api] for details.
98
99[api]: https://www.dartdocs.org/documentation/sass/latest/sass/sass-library.html
100
101## See Also
102
103* [Dart Sass][], from which this package is compiled, can be used either as a
104 stand-alone executable or as a Dart library. Running Dart Sass on the Dart VM
105 is substantially faster than running the pure JavaScript version, so this may
106 be appropriate for performance-sensitive applications. The Dart API is also
107 (currently) more user-friendly than the JavaScript API. See
108 [the Dart Sass README][Using Dart Sass] for details on how to use it.
109
110* [Node Sass][], which is a wrapper around [LibSass][], the C++ implementation
111 of Sass. Node Sass supports the same API as this package and is also faster
112 (although it's usually a little slower than Dart Sass). However, it requires a
113 native library which may be difficult to install, and it's generally slower to
114 add features and fix bugs.
115
116[Using Dart Sass]: https://github.com/sass/dart-sass#using-dart-sass
117[Node Sass]: https://www.npmjs.com/package/node-sass
118[LibSass]: https://sass-lang.com/libsass
119
120## Behavioral Differences from Ruby Sass
121
122There are a few intentional behavioral differences between Dart Sass and Ruby
123Sass. These are generally places where Ruby Sass has an undesired behavior, and
124it's substantially easier to implement the correct behavior than it would be to
125implement compatible behavior. These should all have tracking bugs against Ruby
126Sass to update the reference behavior.
127
1281. `@extend` only accepts simple selectors, as does the second argument of
129 `selector-extend()`. See [issue 1599][].
130
1312. Subject selectors are not supported. See [issue 1126][].
132
1333. Pseudo selector arguments are parsed as `<declaration-value>`s rather than
134 having a more limited custom parsing. See [issue 2120][].
135
1364. The numeric precision is set to 10. See [issue 1122][].
137
1385. The indented syntax parser is more flexible: it doesn't require consistent
139 indentation across the whole document. See [issue 2176][].
140
1416. Colors do not support channel-by-channel arithmetic. See [issue 2144][].
142
1437. Unitless numbers aren't `==` to unit numbers with the same value. In
144 addition, map keys follow the same logic as `==`-equality. See
145 [issue 1496][].
146
1478. `rgba()` and `hsla()` alpha values with percentage units are interpreted as
148 percentages. Other units are forbidden. See [issue 1525][].
149
1509. Too many variable arguments passed to a function is an error. See
151 [issue 1408][].
152
15310. Allow `@extend` to reach outside a media query if there's an identical
154 `@extend` defined outside that query. This isn't tracked explicitly, because
155 it'll be irrelevant when [issue 1050][] is fixed.
156
15711. Some selector pseudos containing placeholder selectors will be compiled
158 where they wouldn't be in Ruby Sass. This better matches the semantics of
159 the selectors in question, and is more efficient. See [issue 2228][].
160
16112. The old-style `:property value` syntax is not supported in the indented
162 syntax. See [issue 2245][].
163
16413. The reference combinator is not supported. See [issue 303][].
165
16614. Universal selector unification is symmetrical. See [issue 2247][].
167
16815. `@extend` doesn't produce an error if it matches but fails to unify. See
169 [issue 2250][].
170
17116. Dart Sass currently only supports UTF-8 documents. We'd like to support
172 more, but Dart currently doesn't support them. See [dart-lang/sdk#11744][],
173 for example.
174
175[issue 1599]: https://github.com/sass/sass/issues/1599
176[issue 1126]: https://github.com/sass/sass/issues/1126
177[issue 2120]: https://github.com/sass/sass/issues/2120
178[issue 1122]: https://github.com/sass/sass/issues/1122
179[issue 2176]: https://github.com/sass/sass/issues/2176
180[issue 2144]: https://github.com/sass/sass/issues/2144
181[issue 1496]: https://github.com/sass/sass/issues/1496
182[issue 1525]: https://github.com/sass/sass/issues/1525
183[issue 1408]: https://github.com/sass/sass/issues/1408
184[issue 1050]: https://github.com/sass/sass/issues/1050
185[issue 2228]: https://github.com/sass/sass/issues/2228
186[issue 2245]: https://github.com/sass/sass/issues/2245
187[issue 303]: https://github.com/sass/sass/issues/303
188[issue 2247]: https://github.com/sass/sass/issues/2247
189[issue 2250]: https://github.com/sass/sass/issues/2250
190[dart-lang/sdk#11744]: https://github.com/dart-lang/sdk/issues/11744
191
192Disclaimer: this is not an official Google product.