Libsass: Tambahkan opsi untuk mengontrol perilaku impor sebaris CSS

Dibuat pada 28 Okt 2015  ·  11Komentar  ·  Sumber: sass/libsass

Kami telah menambahkan kemampuan untuk menyebariskan @import CSS parsial. Ini sangat berbeda dari perilaku Ruby Sass (yang tidak mengizinkan ini sama sekali) dan dapat dimengerti menyebabkan rasa sakit .

Kami membutuhkan opsi konteks untuk mengaktifkan / menonaktifkan fitur ini. Ini harus dinonaktifkan secara default.

Bug - Confirmed Dev - PR Ready Invalid - Not in Sass

Komentar yang paling membantu

Seperti yang dikatakan @xzyfer , coba importir khusus, saya memiliki masalah di mana kami memiliki file .scss dan file .css di direktori yang sama, dan inilah importir yang saya buat untuk node-sass

importer: function(url, prev, done) {
    // Use this to import scss files, instead of css ones
    let updatedUrl = url;
    if (!url.endsWith('.scss') && !url.endsWith('.css')) { // Also don't change ones already explicitly set to .css
        updatedUrl += '.scss';
    }
    grunt.verbose.writeln(`Changed ${url} into ${updatedUrl}`);
    done({file: updatedUrl});
}

Diuji dengan node-sass 4.5.2 libsass 3.5.0-beta2

Semua 11 komentar

Saya pikir kata-katanya agak menyesatkan. Kami hanya mengizinkan impor sebagian css (hal-hal yang diakhiri dengan .css akan dibiarkan sebagai impor sebenarnya dalam kode). Ruby Sass juga tidak mengizinkan ini secara default, tetapi beberapa alat (kompas AFAIK juga) mengaktifkan ini secara default untuk Ruby Sass. Saya juga tidak yakin apakah kami benar-benar ingin menonaktifkannya secara default, karena ini akan menjadi perubahan lain yang berpotensi merusak.

class CSSImporter < Sass::Importers::Filesystem
  def extensions
    super.merge('css' => :scss)
  end
end
Sass::Plugin.options[:filesystem_importer] = CSSImporter

Pengungkapan penuh Saya masih merasa fitur ini harus dihapus. Arahan kami adalah melakukan apa yang dilakukan Ruby Sass. Penyimpangan apa pun dari implementasinya merusak portabilitas, dan tidak dapat dibedakan dari bug.

Ruby Sass juga tidak mengizinkan ini secara default, tetapi beberapa alat (kompas AFAIK juga) mengaktifkan ini secara default untuk Ruby Sass

Ini bukan pekerjaan kita. Ini termasuk dalam bidang alat seperti wellington dan kacamata.

Saya juga tidak yakin apakah kami benar-benar ingin menonaktifkannya secara default

Saya sangat percaya itu harus.

ini akan menjadi perubahan lain yang berpotensi merusak

Perilaku saat ini rusak sejauh menyangkut pengguna Sass.

Saya rasa sudah jelas bahwa saya mendukung fitur ini dan hanya ingin menunjukkan bahwa kerusakan tersebut terutama karena saya telah menerapkan pesan kesalahan untuk impor ambigous untuk libsass 3.3.0. Selain itu kami hanya membedakan secara default dalam penyelesaian parsial (juga menyertakan ekstensi css), dan saya berpendapat bahwa biasanya Anda tidak menghasilkan atau memiliki css dengan nama yang sama di samping impor _pihak_. Tidak yakin kapan saya akan datang untuk mengimplementasikannya sebagai opsi di C-API. Kontributor menyambut;)

Saya pikir situasi yang ideal adalah mereka berdua mendukung fitur ini. Hal terbaik berikutnya adalah seperti yang dikatakan @xzyfer dan setidaknya membuat mereka konsisten, meskipun itu berarti tidak satu pun dari mereka mendukungnya.

Anda harus dapat beralih dari libsass ke ruby ​​sass secara teori tanpa ada yang melanggar. Memiliki sesuatu yang secara sadar akan mencegah hal ini terjadi adalah hal yang buruk.

Anda harus dapat beralih dari libsass ke ruby ​​sass secara teori tanpa ada yang melanggar

Persis.

Hal terbaik berikutnya adalah seperti yang dikatakan @xzyfer dan setidaknya membuatnya konsisten

Inilah yang akan kami lakukan.

Sass 4.0 akan memberikan cara untuk melakukan ini dengan benar.

Fantastis! Tidak sabar.

@mgreter Saya telah berbicara dengan @chriseppstein dan @ nex3 tentang masalah ini. Kami telah memutuskan bahwa meskipun impor CSS sebaris merusak kompatibilitas Ruby Sass secara besar-besaran, menghapus fitur ini kemungkinan besar akan mengecewakan pengguna. Ini telah lama menjadi fitur yang diminta di Ruby Sass yang tidak dimungkinkan karena keterbatasan sebagai superset CSS. Akibatnya hampir orang-orang tertentu bergantung pada perilaku ini.

Mari kita bertujuan untuk menghapus ini di 4.0 karena pengguna lebih menerima perubahan yang melanggar dalam rilis utama, dan karena kita akan memiliki cara resmi untuk menyebariskan impor CSS.

Kami baru-baru ini beralih ke versi terbaru Node dari versi yang jauh lebih lama dan harus memutakhirkan pustaka pihak ketiga yang kami gunakan, agar kompatibel dengan versi Node saat ini. Sekarang semuanya rusak di semua tempat karena bug ini. Saya memahami masalah ini belum terselesaikan di libsass, jadi saya mencoba mencari tahu secara rekursif versi dependensi apa yang perlu kita lihat kembali untuk menyingkirkan masalah ini.

Jadi, beberapa pertanyaan (maaf, jika saya melewatkan info ini di sini, utas ini agak berbelit-belit):

  1. Versi libsass apa yang digunakan untuk bug ini?
  2. Versi apa yang akan diperbaiki - 3.5? 4.0?
  3. Kapan versi itu dijadwalkan untuk dirilis? (Atau apakah sudah dirilis, mungkin?)

Versi libsass apa yang digunakan untuk bug ini?

Saya tidak bisa memastikan. Saya pikir itu sekitar 3.3.0 yang ada di [email protected].

Versi apa yang akan diperbaiki - 3.5? 4.0?

Ini akan diperbaiki dalam 4.0 setelah @use tanah. Ini akan memungkinkan orang secara eksplisit memilih untuk impor CSS.

Kapan versi itu dijadwalkan untuk dirilis?

Tidak mungkin untuk dikatakan sayangnya. Tidak mungkin tahun ini.


Selain itu, jika Anda menggunakan node-sass, Anda dapat menulis importir khusus ke impor noop untuk file .css.

Seperti yang dikatakan @xzyfer , coba importir khusus, saya memiliki masalah di mana kami memiliki file .scss dan file .css di direktori yang sama, dan inilah importir yang saya buat untuk node-sass

importer: function(url, prev, done) {
    // Use this to import scss files, instead of css ones
    let updatedUrl = url;
    if (!url.endsWith('.scss') && !url.endsWith('.css')) { // Also don't change ones already explicitly set to .css
        updatedUrl += '.scss';
    }
    grunt.verbose.writeln(`Changed ${url} into ${updatedUrl}`);
    done({file: updatedUrl});
}

Diuji dengan node-sass 4.5.2 libsass 3.5.0-beta2

Apakah halaman ini membantu?
0 / 5 - 0 peringkat