Di SASS, apakah mungkin untuk mengimpor file dari direktori lain? Misalnya, jika saya memiliki struktur seperti ini:
- root_directory
- sub_directory_a
- _common.scss
- template.scss
- sub_directory_b
- more_styles.scss
template.scss dapat mengimpor _common.scss menggunakan @import "common"
tetapi mungkinkah more_styles.scss mengimpor _common.scss? Saya mencoba beberapa hal berbeda termasuk @import "../sub_directory_a/common"
dan @import "../sub_directory_a/_common.scss"
tetapi tidak ada yang berhasil.
-I
? Jika nama jalur itu berubah, akan ada banyak pencarian dan penggantian; dan itu membutuhkan struktur folder lokal yang sama dari siapa pun yang berbagi .scssAnda dapat menggunakan tombol
-I
baris perintah atau:load_paths
opsi dari kode Ruby untuk ditambahkansub_directory_a
ke jalur pemuatan Sass. Jadi jika Anda menjalankan Sassroot_directory
, lakukan sesuatu seperti ini:Maka Anda hanya dapat menggunakan
@import "common"
dimore_styles.scss
.sumber
-I
Bendera rantai untuk menyertakan lebih dari satu direktori, misalnyasass -I sub_directory_a -I sub_directory_c --watch sub_directory_b:sub_directory_b
Menggunakan webpack dengan sass-loader yang bisa saya gunakan
~
untuk merujuk ke jalur root proyek. Misalnya dengan asumsi struktur folder OPs dan Anda berada dalam file di dalam sub_directory_b:Dokumentasi: https://github.com/webpack-contrib/sass-loader#resolving-import-at-rules
sumber
node_modules/
dan bukan dari akar proyek."sub_directory_a"
ke sayaincludePaths
dan menggunakan@import "common";
sintaks saat menggunakan CLI Angular yang menyertakan sass-loader.~/
bagi saya sepertinya tidak merujuk ke direktori home. Atau direktori mana pun yang telah saya coba uji. Apakah ada cara untuk benar-benar mencoba dan mencari tahu di mana ini mengacu ??Mengimpor
.scss
file yang memiliki impor bersarang dengan posisi relatif berbeda tidak akan berfungsi. jawaban atas yang diusulkan (menggunakan banyak../
) hanyalah peretasan kotor yang akan berfungsi selama Anda menambahkan cukup../
untuk mencapai root OS penerapan proyek Anda.sumber
meteor
, itu hanya contoh.Jawaban yang dipilih tidak menawarkan solusi yang layak.
Praktik OP sepertinya tidak teratur. File bersama / umum biasanya berada di bawah
partials
, direktori boilerplate standar. Anda kemudian harus menambahkanpartials
direktori ke jalur impor konfigurasi Anda untuk menyelesaikan sebagian di mana pun dalam kode Anda.Ketika saya mengalami masalah ini untuk pertama kalinya, saya pikir SASS mungkin memberi Anda variabel global yang mirip dengan Node
__dirname
, yang membuat jalur absolut ke direktori kerja saat ini (cwd
). Sayangnya, tidak dan alasannya adalah karena interpolasi pada@import
direktif tidak memungkinkan, maka Anda tidak dapat melakukan jalur impor dinamis.Menurut dokumen SASS .
Anda perlu mengatur
:load_paths
konfigurasi Sass Anda. Karena OP menggunakan Kompas, saya akan mengikuti sesuai dengan dokumentasi di sini .Anda dapat menggunakan solusi CLI sesuai tujuan, tetapi mengapa? jauh lebih nyaman untuk menambahkannya
config.rb
. Masuk akal untuk menggunakan CLI untuk menimpaconfig.rb
(Misalnya, skenario build berbeda).Jadi, dengan asumsi Anda
config.rb
berada di bawah root proyek, cukup tambahkan baris berikut:add_import_path 'sub_directory_a'
Dan sekarang
@import 'common';
akan bekerja dengan baik di mana saja.Sementara ini menjawab OP, masih ada lagi.
Lampiran
Anda cenderung mengalami kasus di mana Anda ingin mengimpor file CSS dengan cara yang disematkan, yaitu, bukan melalui
@import
arahan vanilla yang disediakan CSS di luar kotak, tetapi penggabungan sebenarnya dari konten file CSS dengan SASS Anda. Ada pertanyaan lain , yang dijawab dengan tidak meyakinkan (solusinya tidak bekerja lintas lingkungan). Solusinya adalah dengan menggunakan ekstensi SASS ini .Setelah terinstal, tambahkan baris berikut ke konfigurasi Anda:
require 'sass-css-importer'
dan kemudian, di suatu tempat di kode Anda:@import 'CSS:myCssFile';
Perhatikan ekstensi harus dihilangkan agar ini berfungsi.
Namun, kami akan mengalami masalah yang sama saat mencoba mengimpor file CSS dari jalur non-default dan
add_import_path
tidak mematuhi file CSS. Jadi untuk mengatasinya, Anda perlu menambahkan, baris lain di konfigurasi Anda, yang secara alami serupa:add_import_path Sass::CssImporter::Importer.new('sub_directory_a')
Sekarang semuanya akan bekerja dengan baik.
PS, saya perhatikan
sass-css-importer
dokumentasi menunjukkanCSS:
awalan diperlukan selain menghilangkan.css
ekstensi. Saya menemukan itu berhasil. Seseorang memulai masalah , yang sejauh ini masih belum terjawab.sumber
Gulp akan melakukan pekerjaan untuk mengawasi file sass Anda dan juga menambahkan jalur file lain dengan includePaths. contoh:
sumber
-I
opsi dari baris perintah, bukan?node-sass
(pembungkus SASS resmi untuknode.js
) menyediakan opsi baris perintah--include-path
untuk membantu dengan persyaratan tersebut.Contoh:
Masuk
package.json
:Sekarang, jika Anda memiliki file
src/styles/common.scss
di proyek Anda, Anda dapat mengimpornya@import 'styles/common';
di mana saja di proyek Anda.Lihat https://github.com/sass/node-sass#usage-1 untuk lebih jelasnya.
sumber
Untuk menentukan file yang akan diimpor, dimungkinkan untuk menggunakan semua folder definisi umum. Anda hanya perlu menyadari bahwa ini relatif terhadap file yang Anda definisikan. Lebih lanjut tentang opsi impor dengan contoh yang dapat Anda periksa di sini .
sumber
Jika menggunakan Web Compiler di Visual Studio Anda dapat menambahkan path ke
includePath
compilerconfig.json.defaults. Maka tidak perlu beberapa nomor../
karena kompilator akan menggunakan includePath sebagai lokasi untuk mencari impor.Sebagai contoh:
sumber
Ini adalah jawaban setengah.
Lihat Kompas , dengan itu Anda dapat menempatkan Anda
_common.scss
di dalampartials
folder, dan kemudian mengimpornya dengan@import common
, tetapi berfungsi di setiap file.sumber
Saya mengalami masalah yang sama. Dari solusi saya, saya datang ke ini. Jadi inilah kode Anda:
Sejauh yang saya tahu jika Anda ingin mengimpor satu scss ke yang lain itu harus parsial. Saat Anda mengimpor dari direktori yang berbeda, beri nama
more_styles.scss
ke_more_styles.scss
. Kemudian impor ketemplate.scss
@import seperti ini../sub_directory_b/_more_styles.scss
. Itu berhasil untuk saya. Tapi seperti yang Anda sebutkan../sub_directory_a/_common.scss
tidak berfungsi. Itu direktori yang sama daritemplate.scss
. Itulah mengapa itu tidak akan berhasil.sumber
Pertimbangkan untuk menggunakan parameter includePaths ...
"Kompiler SASS menggunakan setiap jalur di loadPaths saat menyelesaikan SASS @imports."
https://stackoverflow.com/a/33588202/384884
sumber
Cara terbaik adalah dengan menggunakan sass-loader. Ini tersedia sebagai paket npm. Ini menyelesaikan semua masalah terkait jalur dan membuatnya sangat mudah.
sumber
Saya memiliki masalah yang sama dan saya menemukan solusi dengan menambahkan jalur ke file seperti:
@import "C: / xampp / htdocs / Scss_addons / Bootstrap / bootstrap";
@import "C: / xampp / htdocs / Scss_addons / Kompas / kompas";
sumber