dart-sass icon indicating copy to clipboard operation
dart-sass copied to clipboard

Implement `sass --embedded` in pure JS mode

Open ntkme opened this issue 1 year ago • 1 comments

There has been a few requests for BSD support on the sass-embedded-host-ruby:

  • https://github.com/sass-contrib/sass-embedded-host-ruby/issues/228
  • https://github.com/sass-contrib/sass-embedded-host-ruby/issues/227
  • https://github.com/nanoc/nanoc/issues/1710
  • https://github.com/jekyll/jekyll/issues/9462
  • https://github.com/jekyll/jekyll/issues/9493

The most reasonable solution seems to be implementing sass --embedded in pure JS mode so that we can run embedded compiler using Node.js runtime on platforms that Dart runtime has no support. Aside from BSD, this will also allow users of some minor CPU architecture to run embedded host.

The pure JS implementation should be very similar to the current Dart implementation:

  • Use synchronous compilation only for better performance.
  • Use Node.js worker threads to replace Dart isolates.
  • Use SyncMessagePort from embedded-host-node to replace Mailbox.

ntkme avatar Aug 30 '24 00:08 ntkme

I'm not opposed to this, and I'd definitely like to not be beholden to Dart's platform restrictions (which I've put some additional pressure on). Dart does also have increasingly real support for compiling to WASM, which might eventually make it possible to do this without a full Node.js runtime (if Wasmer ever adds GC support https://github.com/wasmerio/wasmer/issues/357), so that's another avenue that could be worth investigating.

nex3 avatar Aug 30 '24 01:08 nex3