twbs / bootstrap-rubygem

Bootstrap rubygem for Rails / Sprockets / Hanami / etc
https://rubygems.org/gems/bootstrap
MIT License
2.02k stars 447 forks source link

Move to Dart Sass #255

Closed SebouChu closed 1 year ago

SebouChu commented 1 year ago

Hi!

Giving the fact that SassC is deprecated and that the sassc-rails gem seems dead for more than 3 years, I think the Bootstrap gem should move to Dart Sass.

The Rails organization has a wrapper, being the dartsass-rails gem but it's not compatible with Sprockets.

As an alternative, the TableCheck organization made a Sprockets-compatible wrapper, beautifully named dartsass-sprockets.

What do you think?

glebm commented 1 year ago

I don't use Rails much anymore but it sounds like migrating to dartsass-sprockets would make sense. I'm guessing that in the post-Sprockets Rails JavaScript world this gem simply isn't needed, as one can use the npm bootstrap package directly.

SebouChu commented 1 year ago

Yeah, I was thinking pretty much the same thing 👍

If no one is available on your team and if you're okay with this, I can try to fork and make the change there!

jcoyne commented 1 year ago

How about not specifying a sass dependency at all and leaving it up to the user to select the one that is appropriate for them?

gravitystorm commented 1 year ago

I just want to chime in here with my experience.

I'm a maintainer over at OpenStreetMap and the dependency on sassc-rails is blocking us from upgrading to bootstrap 5.2 . We are running into an issue where libsass can no longer parse it's own compressed output, with syntax that is used in bootstrap 5.2+, and that's causing problems while precompiling all our assets. More details on the exact syntax issue in this comment

Since libsass is dead, and the parsing problem is unlikely to be fixed there, I want to switch to dartsass-sprockets. But we can't since it's an either/or with sassc-rails vs dartsass-sprockets. And this gem has a hard runtime dependency on sassc-rails.

I'd be in favour of either proposed solution - either switching the dependency to dartsass-sprockets (as per #256), or figuring out how to drop the hardcoded sass engine dependency entirely (as per above comment). Either way, having a bootstrap-rubygem is still very useful for us, just not one that depends on a legacy unmaintained gem! :smile:

SebouChu commented 1 year ago

Not having a hardcoded Sass dependency would be better I guess, but I don't really know how to write this in a smart and clean way :(

SebouChu commented 1 year ago

https://github.com/twbs/bootstrap-rubygem/blob/d64321517dba09fe1e949b46078da38df339c507/lib/bootstrap/engine.rb#L4

Something clean to write here maybe if we want to declare Sass as a soft dependency and let the user pick between the two gems (other than removing the gem from the current dependencies)

SebouChu commented 1 year ago

Maybe something like this?

begin
  require 'dartsass-sprockets'
rescue LoadError
  require 'sassc-rails'
rescue LoadError
  raise LoadError.new("bootstrap-rubygem requires a Sass engine. Please add dartsass-sprockets or sassc-rails to your dependencies.")
end
glebm commented 1 year ago

@SebouChu Yeah something along these lines would be ideal