Less.js: properti duplikat saat @impor beberapa kali (bersarang @impor)

Dibuat pada 25 Jun 2010  ·  49Komentar  ·  Sumber: less/less.js

Master @import A & B,
B @import A

Saat menggunakan mixin dari A di file master, propertinya diduplikasi

Lihat unit test untuk info lebih lanjut

Konfigurasi: lessc cli versi 1.0.21 di ubuntu 10.04

Semua 49 komentar

Saya kira masalahnya adalah file tersebut diimpor dua kali, itulah perilaku yang benar untuk mixin.

Apakah menurut Anda itu harus mengimpor file dua kali? Jika tidak, itu juga harus memperhitungkan url relatif. Sebagai contoh

// in main.less
<strong i="6">@import</strong>: imports/import1.less;
<strong i="7">@import</strong>: imports/import2.less;

// in imports/import1.less
<strong i="8">@import</strong>: import2.less; // don't import this
<strong i="9">@import</strong>: imports/import2.less; // do import this

hmmm, saya ingin tahu apakah ada cara yang lebih mudah untuk memeriksa apakah suatu file sama dengan file lain. Mungkin sesuatu di header.

Ukuran file adalah indikator yang murah dan kemungkinan besar unik di setiap kumpulan file sumber tertentu. Namun _mungkin_ memiliki 2 file dengan ukuran yang sama.

Demikian pula dengan tanggal diubah.

Jika server menyetel tajuk ETag, Anda dapat/harus menggunakannya.

Kami menggunakan hash MD5 dari konten file sebagai kunci saat melakukan caching, tetapi menurut saya pribadi itu berlebihan.

hmmm, ya masalahnya javascript tidak memiliki MD5 asli, atau saya akan menggunakannya ..
ETag akan ideal, tetapi beberapa server tidak mengaturnya. Aku harus memikirkan ini.

Tampaknya kami setuju bahwa file tidak boleh diimpor dua kali. Namun apakah itu selalu benar? (yaitu dengan bantuan ruang lingkup, mengimpor dalam mixim mungkin baik-baik saja - cloudhead Anda dapat menjawab lebih baik daripada saya untuk yang ini).

Banyak bahasa telah memecahkan masalah ini dengan berbagai cara:

  • C -> #ifndef / #define / #endif
  • PHP -> include_once()

"Cara" mungkin sedikit lebih sulit untuk diterapkan tetapi kondisional mungkin menawarkan kemungkinan besar lainnya.

Jika "cara PHP" dipilih, kita perlu memilih cara untuk membedakan file. URL absolut tampaknya merupakan pilihan yang baik (kami memilikinya secara langsung atau melalui document.location + URL relatif) - Saya pikir ini lebih baik daripada ukuran / panjang / MD5 karena tidak menggunakan permintaan HTTP.
Namun itu mungkin tidak cukup: setiap URL dipetakan ke satu file tetapi setiap file mungkin dipetakan ke beberapa URL. Dalam kasus seperti itu, memperkenalkan kata kunci baru @<strong i="16">@name</strong>: <unique name> mungkin bisa membantu.

Algo @import_once akan menjadi: jika URL absolut belum diimpor, dapatkan file dan periksa apakah @ @name sudah diimpor, jika tidak impor file.

Saya setuju. dalam konteks satu permintaan, Anda harus dapat berasumsi bahwa sumber daya tidak berubah. jadi url absolut harus cukup baik.

memeriksa perubahan file adalah masalah lain.

saya pikir kita harus menjaga impor @import beberapa kali karena ini adalah cara kerja @import asli,

saya suka solusi mirip php @vicb , tetapi alih-alih @import_once saya suka sesuatu yang lebih baik di 'komentar' sehingga masih kompatibel dengan sintaks css asli.

dapatkah kita menambahkan sesuatu seperti ini di atas file .less:
/_! membutuhkan:url (./abc.less)_/

Saya juga mengalami masalah ini. Proyek saya memiliki hierarki file KURANG yang dikompilasi menjadi satu file .css. Ada satu file KURANG utilitas yang disertakan dalam beberapa file, pada akhirnya semua mixin diduplikasi dengan jumlah yang sama dengan file utilitas yang telah diimpor.

Sebuah @import_once, atau mungkin @import: sekali url ( 'url'); akan memecahkan masalah ini.

Kami menghadapi masalah yang sama dengan @NielsJanssen di proyek kami,

Juga mengalami masalah ini. Ada yang tahu solusinya?

Memiliki masalah yang sama di sini. Tidak dapat menemukan solusi sederhana, hanya mengatur ulang impor sehingga tidak diimpor dua kali.

Saya sangat menyarankan untuk memeriksa Stylus jika Anda menggunakan node.js. Saya menggunakan KURANG untuk sementara, merasa frustrasi dengan kurangnya pengembangan, beralih ke SASS dan akhirnya ke Stylus. Ini benar-benar memaku fitur, sintaksnya opsional (dan saya menggunakan jalan tengah), sangat kuat, dan TJ adalah pengembang yang sangat responsif.

Jika Anda tidak menggunakan node.js, Anda masih dapat menggunakan Stylus dengan ruby ​​dan kompilasi di mesin Anda. Dan jika Anda tidak menyukai Stylus karena alasan apa pun, SASS/SCSS juga merupakan alternatif yang bagus dan dapat dilakukan dengan cara yang sama.

Singkat cerita: KURANG tidak baik dalam jangka panjang.

Sikap yang sangat buruk manusia.

Tidak perlu memposting bs itu di sini. Anda bisa saja mengirimkannya melalui surat atau sejenisnya. Anda tidak dapat memiliki standar tinggi seperti menginginkan "pengembang yang benar-benar responsif" untuk sesuatu yang gratis untuk digunakan.

Sama sekali tidak.

Saya akan menyukai nasihat itu ketika saya pertama kali menemukan KURANG sehingga saya tidak membuang waktu berminggu-minggu untuk membiasakan diri, dan mengubahnya ketika saya akhirnya pergi. Memang saya seharusnya memperhatikannya sendiri terlebih dahulu, karena ada lebih banyak masalah terbuka daripada yang tertutup, dan kebanyakan dari mereka belum ditanggapi.

Ini bukan tentang standar apa yang bisa atau tidak bisa saya miliki. Ini tentang memberikan peringatan kepada orang-orang, ketika ada alternatif yang lebih baik.

Jadi saya mendukung "BS" saya dan berharap orang-orang menganggap peringatan itu bermanfaat.

@ianstormtaylor : mengatakan sebuah proyek "tidak baik dalam jangka panjang" agak histeris.

mengalami masalah yang sama juga.

foo.less

<strong i="7">@import</strong> "bar.less";
<strong i="8">@import</strong> "baz.less";

bar.less

<strong i="12">@import</strong> "mixins.less";
.bar {
  .mixer
}

baz.less

<strong i="16">@import</strong> "mixins.less";
.baz {
  .mixer
}

mixin.less

.mixer {
  color: 000;
  border: 2px solid #fff;
}
$ lessc foo.less
.mixer {
  color: 000;
  border: 2px solid #fff;
}
.bar {
  color: 000;
  border: 2px solid #fff;
  color: 000;
  border: 2px solid #fff;
}
.mixer {
  color: 000;
  border: 2px solid #fff;
}
.baz {
  color: 000;
  border: 2px solid #fff;
  color: 000;
  border: 2px solid #fff;
}

Saya menghindari diskusi ini sebelumnya tetapi sekarang saya menghadapi masalah yang sama ... @wlangstroth saya tidak berpikir @ianstormtaylor sama sekali histeris. cukup periksa daftar masalah terbuka untuk proyek ini dan berapa lama beberapa di antaranya telah dibuka. less adalah alat yang berguna tetapi saya pikir ini penilaian yang adil bahwa dukungan terbatas dan itu menjadi sangat membuat frustrasi saat menunggu.

saya mendapat kesan bahwa @cloudhead kebanyakan mengabaikan komentar yang saya buat (mungkin saya salah tentang ini) tetapi akan lebih baik untuk mendengar "saya sibuk" atau "saya tidak ingin memperbaikinya" atau bahkan sesuatu yang lebih keras daripada tidak mendapatkan respon sama sekali.

Anda _could_ hanya memiliki file main.less yang berisi semua impor Anda. Lihat bootstrap Twitter untuk contoh (file utama adalah bootstrap.less ).

beberapa file lebih sedikit yang saya impor (dari perpustakaan eksternal) ditulis untuk dapat dikompilasi secara mandiri sehingga masing-masing menyertakan variables.less dan masalah yang saya lihat terjadi karena saya mengimpor masing-masing file tersebut lebih sedikit file ke dalam satu file utama dan kemudian mengkompilasi file itu menerapkan setiap mixin sebanyak mixin yang disertakan (sekali untuk setiap file yang saya sertakan dari perpustakaan eksternal).

Anda benar - saya _bisa_ melakukan sesuatu seperti yang Anda sarankan dan saya _am_ melakukan sesuatu seperti itu dalam kode yang saya kendalikan sepenuhnya tetapi itu tidak berarti semua orang melakukannya seperti itu.

juga, solusi (_only_ jika saya tidak menggunakan perpustakaan pihak ketiga) tidak mengubah bahwa ini adalah bug. saya menjadi cukup akrab dengan cara mengatasi masalah dengan lebih sedikit tetapi membuat frustrasi karena bug seperti ini telah terbuka selama hampir 18 bulan. ( @wlangstroth saya sadar itu bukan salah _your_)

bagi siapa saja yang tertarik, saya memiliki perbaikan brute force (tidak diuji terhadap tes @vicb tetapi harus berfungsi) yang saya tempel di komentar di #431. saya akan mencoba dan menemukan solusi yang lebih baik jika saya mendapatkan lebih banyak waktu.

memiliki masalah yang sama

Juga memiliki masalah ini, tetapi memperbaikinya dengan mengimpor perpustakaan mixin saya ke bootstrap.less saya. Tidak menyadari impor berikutnya akan memiliki akses ke sana, tetapi masuk akal.

fyi #431 adalah permintaan tarik yang memperbaiki masalah ini

@cloudhead Apakah Anda dapat menerapkan perbaikan untuk ini. Ini mungkin salah satu masalah tertua yang masih terbuka. Akan menyenangkan untuk melihatnya diselesaikan.

Masalah yang sama :-(

Sebagai saran kepada siapa saja yang mengalami masalah dengan masalah ini, saya sarankan Anda mengirim pesan kepada Alexis di Twitter. Alexis sebelumnya mengatakan dalam beberapa tiket bahwa dia tidak dapat memantau semua masalah dan benar-benar hanya memperbaiki ketika dia mengetahui tingkat keparahannya. Saya menganggap ini adalah masalah yang parah tetapi belum bisa membawanya ke perhatian Alexis di Twitter.

Mungkin orang lain mungkin lebih beruntung.

Twitter: https://twitter.com/#!/cloudhead

Dan masukkan tautan ke masalah ini: https://github.com/cloudhead/less.js/issues/49

@Kalyse jika @cloudhead tidak dapat secara memadai memantau masalah proyek ini maka itu adalah alasan yang lebih bagi semua orang untuk menghindari menggunakannya. orang telah menyarankan bahwa dia harus menominasikan beberapa orang lain untuk membantu mengelola tumpukan masalah tetapi sekali lagi tidak ada tanggapan.

mengapa saya harus menggunakan twitter untuk mendapatkan perhatian seseorang ketika mereka sudah bisa mendapatkan peringatan ketika saya menyebutkan mereka dalam suatu masalah? Saya pikir itu memalukan bahwa @cloudhead tidak dapat menanggapi masalah yang telah terbuka selama 2 tahun - dia setidaknya dapat menemukan beberapa orang yang dia percayai dan membuat mereka mulai bekerja melalui tumpukan masalah terbuka. mereka setidaknya bisa menutup duplikat dan membantu mengurangi jumlah masalah terbuka untuknya.

Sistem notifikasi github sama sekali tidak berguna - saya mendapatkan sekitar 70-100 notifikasi per hari, jadi saya lebih memilih untuk mengabaikannya saja.

Aku akan melihat ke dalam ini..

Oke, saya menambahkan direktif @import-once - ini cukup sederhana, karena hanya memeriksa apakah jalurnya cocok - tetapi harus mencakup sebagian besar kasus penggunaan.

@cloudhead Senang Anda bisa mengatasi masalah ini! Mengapa tidak memfilter aturan duplikat di output?

Saya pribadi tidak mengerti mengapa proyek ini bahkan ada di Github jika permintaan tarik bahkan tidak dipertimbangkan atau mengapa pelacak masalah bahkan berjalan jika masalah diabaikan.

Mudah orang! Jika ada satu orang yang memiliki proyek sepopuler ini, mereka akan berada di kapal yang sama. @cloudhead telah melakukan pekerjaan dengan baik dan mungkin perlu menambahkan beberapa orang tepercaya sebagai admin. Tetapi masalah dengan permintaan tarik dan pengujian jauh lebih membantu daripada masalah saja. Mungkin memperbaiki beberapa masalah saat Anda sedang bersantai.

Orang-orang telah memperbaiki banyak masalah, terkadang bertahun-tahun yang lalu. Lihat salah satu dari 74 permintaan tarik yang luar biasa tanpa tanggapan. Sebagai contoh, masalah ini memiliki banyak penipuan kembali 2 tahun (seperti #324 #71). Inilah permintaan tarik yang akan memperbaiki masalah ini dengan cukup sederhana: https://github.com/cloudhead/less.js/pull/431Komiter meminta umpan balik, disambut dengan diam, dan akhirnya menyerah.

@cloudhead - Alexis, ini adalah proyek yang terlalu bagus untuk dibiarkan rusak. Ketika orang melihat hal seperti yang disebutkan di atas, itu meninggalkan kesan bahwa proyek tersebut tidak dapat dipercaya atau tidak dapat diandalkan. Dan itu tidak perlu! Keajaiban github adalah Anda dapat dengan mudah menemukan beberapa orang yang menulis kode hebat dan tertarik untuk berkomitmen pada proyek tersebut. Tanyakan kepada orang-orang baik itu apakah mereka akan membantu memoderasi masalah dan menarik permintaan.

Kami semua menyukai pekerjaan Anda. Masyarakat ingin membantu. Mari kita membantu!

@jeremyricketts poin bagus.

Saya setuju dengan @jeremyricketts -- di perusahaan tempat saya bekerja, kami akhirnya tidak menggunakan KURANG (melakukan rute SASS) karena kurangnya pembaruan/perbaikan bug dalam repo ini.

@cloudhead sepertinya arahan @import-once tidak berfungsi, ini adalah kasus pengujian saya.

// a.less
.gain-bfc() {
  overflow: hidden;
  *zoom: 1;
}

// b.less
@import-once "a.less";

// c.less
@import-once "a.less";
@import-once "b.less";

div {
  .gain-bfc();
}

setelah mengkompilasi c.less , hasil yang diharapkan adalah

div {
  overflow: hidden;
  *zoom: 1;
}

tetapi saya mendapatkan properti yang digandakan

div {
  overflow: hidden;
  *zoom: 1;
  overflow: hidden;
  *zoom: 1;
}

+1 jeremyricketts

Seseorang dengan beberapa daging pemrograman yang sebenarnya diperlukan. Dunia saya adalah PSD, pensil dan kertas, dan CSS html dan pekerjaan jQuery ringan.

Beberapa orang diperlukan hanya untuk mengatasi masalah dan menarik permintaan,
pangkas duplikat, pastikan ada kasus uji untuk bug, dll. Saya ingin
untuk menjadi sukarelawan untuk membantu setidaknya, dan saya mungkin bisa membantu
tutup bug yang lebih kecil juga.
Pada 23 Mar 2012 13:28, "Jeremy Ricketts" <
[email protected]>
menulis:

Seseorang dengan beberapa daging pemrograman yang sebenarnya diperlukan. Duniaku adalah PSD,
pensil dan kertas, dan CSS html dan pekerjaan jQuery ringan.


Balas email ini secara langsung atau lihat di GitHub:
https://github.com/cloudhead/less.js/issues/49#issuecomment -4667283

@cloudhead Kalau-kalau Anda kesulitan memikirkan perbaikan yang baik untuk ini, Anda harus melihat resolusi @neonstalwart beberapa waktu lalu.

Pada dasarnya, aturan tidak boleh ditambahkan ke penyeleksi jika ada aturan yang ada dengan nilai yang sama dengan properti saat ini. Anda juga harus memeriksa nilai properti, karena dengan latar belakang, Anda dapat menambahkan beberapa latar belakang yang berbeda karena ditangani secara berbeda di browser yang berbeda.

Apa pendapat Anda tentang solusi ini @cloudhead
Sepertinya jalan ke depan?

Tidak memperbaiki ini berarti:

1) File lebih besar dari yang seharusnya.
2) Menyebarkan CSS Anda ke beberapa file dan mengimpor banyak menjadi tidak diinginkan karena setiap kali Anda menyertakan file tambahan yang juga menyertakan mixin, Anda menambahkan nilai mixin itu lagi. Saya mungkin memiliki 80 gaya CSS yang lebih sedikit, dan ini berarti bahwa ketika saya melakukan pencampuran gradien .background(), menghasilkan 80 * 6 gaya tambahan untuk setiap pemilih. (6 untuk mendukung semua browser yang berbeda).
3) Ini juga memperlambat rendering halaman. Penarikan/penyegaran per detik saya turun drastis karena gaya tambahan.

Pikiran @cloudhead ?
Bersulang.

@cloudhead Jika kami membuat permintaan tarik untuk masalah ini dari komit terbaru, apakah Anda akan melihat penggabungan?

@Kalyse bisakah Anda mengirimi saya email? [email protected]

Bersulang

Mungkin yang diperlukan adalah beberapa pengembang tepercaya tambahan yang dapat menyetujui permintaan tarik?

@cloudhead Saya menggunakan WinLess untuk mengkompilasi kode KURANG saya... WinLess hadir dengan distro terbaru less.js (lihat https://github.com/marklagendijk/WinLess/issues/14), jadi ada ide kapan ini (dan perbaikan lainnya ) akan ditambahkan ke rilis terbaru?

Terima kasih (untuk produk yang bagus).

jadi, eh eh... Bagaimana kita melakukan ini?

@jreading Saya pikir itu telah diperbaiki di git dengan komit cb7893

Tampaknya diperbaiki (atau setidaknya masalah asli) dan jika tidak, saya yakin ada bug lain untuk menutupi ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat