Die ausgewählte Antwort bietet keine praktikable Lösung.
Die Praxis von OP scheint unregelmäßig. Eine gemeinsam genutzte / gemeinsame Datei befindet sich normalerweise in partials
einem Standard-Boilerplate-Verzeichnis. Anschließend sollten Sie partials
Ihren Konfigurationsimportpfaden ein Verzeichnis hinzufügen , um Partials an einer beliebigen Stelle in Ihrem Code aufzulösen.
Als ich zum ersten Mal auf dieses Problem stieß, stellte ich fest, dass SASS Ihnen wahrscheinlich eine globale Variable ähnlich der von Node gibt __dirname
, die einen absoluten Pfad zum aktuellen Arbeitsverzeichnis ( cwd
) beibehält. Dies ist leider nicht der Fall, und der Grund dafür ist, dass eine Interpolation einer @import
Direktive nicht möglich ist. Daher können Sie keinen dynamischen Importpfad erstellen.
Laut SASS-Dokumenten .
Sie müssen :load_paths
in Ihrer Sass-Konfiguration einstellen . Da OP Compass verwendet, werde ich dies gemäß der Dokumentation hier befolgen .
Sie können die CLI-Lösung wie vorgesehen verwenden, aber warum? Es ist viel bequemer, es hinzuzufügen config.rb
. Es wäre sinnvoll, CLI zum Überschreiben zu verwenden config.rb
(z. B. verschiedene Build-Szenarien).
Angenommen, Sie config.rb
befinden sich unter dem Projektstamm, fügen Sie einfach die folgende Zeile hinzu:
add_import_path 'sub_directory_a'
Und jetzt @import 'common';
wird überall gut funktionieren.
Während dies OP beantwortet, gibt es noch mehr.
Blinddarm
Es ist wahrscheinlich, dass Sie auf Fälle stoßen, in denen Sie eine CSS-Datei auf eingebettete Weise importieren möchten, dh nicht über die Vanilla- @import
Direktive, die CSS standardmäßig bereitstellt, sondern über die tatsächliche Zusammenführung eines CSS-Dateiinhalts mit Ihrem SASS. Es gibt noch eine andere Frage , die nicht eindeutig beantwortet wird (die Lösung funktioniert nicht umgebungsübergreifend). Die Lösung besteht dann darin, diese SASS-Erweiterung zu verwenden.
Fügen Sie nach der Installation Ihrer Konfiguration die folgende Zeile hinzu: require 'sass-css-importer'
und dann irgendwo in Ihrem Code:@import 'CSS:myCssFile';
Beachten Sie, dass die Erweiterung weggelassen werden muss, damit dies funktioniert.
Beim Versuch, eine CSS-Datei aus einem nicht standardmäßigen Pfad zu importieren, tritt jedoch dasselbe Problem auf, und add_import_path
CSS-Dateien werden nicht berücksichtigt. Um dies zu lösen, müssen Sie eine weitere Zeile in Ihrer Konfiguration hinzufügen, die natürlich ähnlich ist:
add_import_path Sass::CssImporter::Importer.new('sub_directory_a')
Jetzt wird alles gut funktionieren.
PS: Ich habe festgestellt, dass in der sass-css-importer
Dokumentation angegeben CSS:
ist, dass zusätzlich zum Weglassen der .css
Erweiterung ein Präfix erforderlich ist . Ich fand heraus, dass es trotzdem funktioniert. Jemand hat ein Problem gestartet , das bisher unbeantwortet blieb.
-I
? Wenn sich dieser Pfadname ändert, wird viel gesucht und ersetzt. und es erfordert die gleiche lokale Ordnerstruktur von jedem, der die .scss