2013-02-20 8 views
5

Ich brauche spezielle scss-Datei, die für jede Installation des Projekts unterschiedlich ist, also möchte ich es nicht in Git-Archiv enthalten. Aber alles sollte funktionieren, auch wenn diese Datei nicht existiert.Wie importiert man die scss-Datei nur im Kompass, wenn sie existiert?

Gibt es eine Möglichkeit, scss-Datei @import nur wenn es existiert, Ignorieren Datei nicht gefunden Fehler?

+2

Was ist los mit nur eine leere Datei? – cimmanon

+0

Ich muss es unter Quellcode-Kontrolle setzen, damit diese projektabhängigen scss Module gittigored werden sollten. –

Antwort

5

Sie müssen dazu die Option "import-path" verwenden, wobei der zu importierende Pfad die Fallback-Dateien enthält, die Sie importieren möchten (in unserem Fall möchten wir eine leere Datei).

Option 1: Vanilla Sass

Dateistruktur

├── fallback 
    ├── _example.scss // <-- our blank file 
├── _example.scss // <-- the file for the user to customize (optional) 
├── style.scss 

In style.scss:

@import "example"; 
/* the rest of our styles */ 

Wenn Sie sass Befehl ausführen, würden Sie schreiben es wie dies:

sass --watch ./css:./sass --load-path ./sass/fallback 

Beachten Sie, dass sich das Fallback-Verzeichnis nicht in Ihrem Sass-Verzeichnis befinden muss, sondern irgendwo im Dateisystem, das Sie mögen.auch

Siehe: How does SCSS locate partials?

Option 2: Compass Erweiterung

Sie können feststellen, dass ein Kompass Erweiterung zu schaffen ein wenig bequemer ist, wenn man diese Technik in mehreren Projekten verwenden. Es wird automatisch den Ladepfad für Sie einrichten. Weitere Informationen zum Erstellen von Erweiterungen finden Sie hier: http://compass-style.org/help/tutorials/extensions/

+0

Danke, das ist was ich brauche. Ich ging tatsächlich ein bisschen anders, und setze 'additional_import_paths = [" ./lib "]', wo ich Module platzierte, die überschrieben werden können, so dass es nach lokalen Dateien sucht und dann in "./lib" –

2

Vielleicht mit sass-globbing und eine Namenskonvention für optionale Dateien folgen einer bestimmten Reihenfolge des Ladens.

Betrachten Sie den folgenden Baum:

stackoverflow-14975341/ 
├── .gitignore 
├── config.rb 
├── css/ 
│   └── screen.css 
└── sass/ 
    ├── optionals/ 
    │   ├── .gitkeep 
    │   ├── _01_style.scss 
    │   └── _03_style.scss 
    └── screen.scss 

mit diesen Dateien:

# config.rb 
require 'sass-globbing' 

sass_dir = 'sass' 
css_dir = 'css' 
relative_assets = true 

und

// sass/screen.scss 
@import "optionals/*"; 

und

// sass/optionals/_01_style.scss 
.optional1 { 
    background-color: red; 
} 

und

// sass/optionals/_03_style.scss 
.optional3 { 
    background-color: green; 
} 

und für in dem .gitignore:

sass/optional/* 

schließlich die optional Ordner zu halten, eine leere Datei mit dem Namen erstellen (ist der Dateiname nicht wichtig) .gitkeep. Wenn Sie das Stylesheet kompilieren, generiert Compass das screen.css, selbst wenn die Datei _02_style.scss fehlt.

Es ist sicherlich möglich, das System basierend auf dem Import zusätzlicher Pfade zu verbessern.

+0

Also ich denke, es ist nicht ohne zusätzliche Plugins aus der Box möglich? Ich habe über die Möglichkeit nachgedacht, bestimmte scss-Module zu überschreiben, indem ich zwei Pfade für die Suche nach einem scss-Modul habe. Wenn das Übersteuerungsmodul nicht gefunden wird, wird das Standardmodul importiert. Ist es möglich? –

+0

Dies liegt näher an der von @cimmanon beschriebenen Lösung. – piouPiouM

Verwandte Themen