Warnung: Node Sass hat das Ende seiner Lebensdauer erreicht. Es wird keine weiteren Releases geben, auch nicht für Sicherheitsupdates. Projekte, die es immer noch verwenden, sollten auf Dart Sass umsteigen.
Die unterstützten Node.js-Versionen variieren je nach Release. Bitte konsultieren Sie die Release-Seite.
Knotenversionen, deren Lebensdauer abgelaufen ist https://github.com/nodejs/Release, werden bei jeder Node-Sass-Version (Haupt- und Nebenversion) nicht mehr unterstützt.
Wir werden aufhören, Binärdateien für nicht unterstützte Versionen zu erstellen und auf Fehler in der Abhängigkeitskompatibilität zu testen, aber wir werden keine Installationen für diejenigen blockieren, die sich selbst unterstützen möchten.
Neue Knotenversionen erfordern geringfügige interne Änderungen sowie Unterstützung durch CI-Anbieter (AppVeyor, GitHub Actions). Wir werden eine einzelne Ausgabe für Interessenten zum Abonnieren öffnen und weitere Ausgaben schließen.
Nachfolgend finden Sie eine Kurzanleitung für die minimal und maximal unterstützten Versionen von Node-Sass:
NodeJS | Unterstützte Node-Sass-Version | Knotenmodul |
---|---|---|
Knoten 20 | 9,0+ | 115 |
Knoten 19 | 8,0+ | 111 |
Knoten 18 | 8,0+ | 108 |
Knoten 17 | 7,0+, <8,0 | 102 |
Knoten 16 | 6,0+ | 93 |
Knoten 15 | 5,0+, <7,0 | 88 |
Knoten 14 | 4,14+, <9,0 | 83 |
Knoten 13 | 4,13+, <5,0 | 79 |
Knoten 12 | 4,12+, <8,0 | 72 |
Knoten 11 | 4,10+, <5,0 | 67 |
Knoten 10 | 4,9+, <6,0 | 64 |
Knoten 8 | 4.5.3+, <5.0 | 57 |
Knoten <8 | <5,0 | <57 |
Es ermöglicht Ihnen, .scss-Dateien mit unglaublicher Geschwindigkeit und automatisch über eine Connect-Middleware nativ in CSS zu kompilieren.
Finden Sie es auf npm: https://www.npmjs.com/package/node-sass
Folgen Sie @nodesass auf Twitter für Release-Updates: https://twitter.com/nodesass
npm installiere Node-Sass
Einige Benutzer haben Probleme bei der Installation unter Ubuntu gemeldet, weil node
bei einem anderen Paket registriert war. Befolgen Sie die offiziellen NodeJS-Dokumente, um NodeJS zu installieren, damit #!/usr/bin/env node
korrekt aufgelöst wird.
Für das Kompilieren auf Windows-Maschinen sind die Node-Gyp-Voraussetzungen erforderlich.
Sehen Sie den folgenden Fehler? Sehen Sie sich unseren Leitfaden zur Fehlerbehebung an.**
SyntaxError: Use of const in strict mode.
Haben Sie Installationsprobleme? Schauen Sie sich unseren Leitfaden zur Fehlerbehebung an.
npm install -g Mirror-config-china --registry=https://registry.npmmirror.com npm installiere Node-Sass
var sass = require('node-sass');sass.render({ Datei: scss_filename, [, Optionen..]}, function(err, result) { /*...*/ });// ORvar result = sass.renderSync({ Daten: scss_content [, Optionen..]});
Typ: String
Standard: null
Besonderheit : file
oder data
müssen angegeben werden
Pfad zu einer Datei, die LibSass kompilieren soll.
Typ: String
Standard: null
Besonderheit : file
oder data
müssen angegeben werden
Eine Zeichenfolge, die zum Kompilieren an LibSass übergeben wird. Es wird empfohlen, includePaths
in Verbindung damit zu verwenden, damit LibSass Dateien finden kann, wenn die @import
-Direktive verwendet wird.
Dies ist eine experimentelle LibSass-Funktion. Mit Vorsicht verwenden.
Typ: Function | Function[]
function(url, prev, done)
Standard: undefined
Funktionsparameter und Informationen:
url (String)
– der Pfad im Import as-is , den LibSass gefunden hat
prev (String)
– der zuvor aufgelöste Pfad
done (Function)
– eine Rückruffunktion, die bei asynchronem Abschluss aufgerufen wird und ein Objektliteral benötigt, das Folgendes enthält
file (String)
– ein alternativer Pfad für LibSass zur Verwendung von OR
contents (String)
– der importierte Inhalt (z. B. aus dem Speicher oder dem Dateisystem gelesen)
Behandelt, wenn LibSass auf die @import
-Direktive trifft. Ein benutzerdefinierter Importer ermöglicht die Erweiterung der LibSass-Engine sowohl auf synchrone als auch auf asynchrone Weise. In beiden Fällen besteht das Ziel darin, done()
entweder return
oder mit einem Objektliteral aufzurufen. Abhängig vom Wert des Objektliterals geschieht eines von zwei Dingen.
Beim Zurückgeben oder Aufrufen von done()
mit { file: "String" }
wird der neue Dateipfad für @import
angenommen. Es wird empfohlen, den Wert von prev
in Fällen zu berücksichtigen, in denen eine relative Pfadauflösung erforderlich sein kann.
Beim Zurückgeben oder Aufrufen von done()
mit { contents: "String" }
wird der String-Wert verwendet, als ob die Datei über eine externe Quelle eingelesen würde.
Ab v3.0.0:
this
bezieht sich auf einen kontextuellen Bereich für die unmittelbare Ausführung von sass.render
oder sass.renderSync
Importeure können einen Fehler zurückgeben und LibSass gibt diesen Fehler als Antwort aus. Zum Beispiel:
done(new Error('existiert nicht!'));// oder synchron zurückkehrenreturn new Error('hier gibt es nichts zu tun');
importer kann ein Array von Funktionen sein, die von LibSass in der Reihenfolge ihres Auftretens im Array aufgerufen werden. Dies hilft dem Benutzer, einen speziellen Importer für eine bestimmte Art von Pfad (Dateisystem, http) anzugeben. Wenn ein Importer einen bestimmten Pfad nicht verarbeiten möchte, sollte er null
zurückgeben. Weitere Informationen zu Sass-Typen finden Sie im Abschnitt „Funktionen“.
Dies ist eine experimentelle LibSass-Funktion. Mit Vorsicht verwenden.
functions
ist ein Object
, das eine Sammlung benutzerdefinierter Funktionen enthält, die von den zu kompilierenden Sass-Dateien aufgerufen werden können. Sie können null oder mehr Eingabeparameter annehmen und müssen entweder synchron ( return ...;
) oder asynchron ( done();
) einen Wert zurückgeben. Diese Parameter sind Instanzen eines der Konstruktoren, die im Hash require('node-sass').types
enthalten sind. Der Rückgabewert muss ebenfalls von einem dieser Typen sein. Sehen Sie sich die Liste der verfügbaren Typen unten an:
getValue()
/ setValue(value)
: ruft den numerischen Teil der Zahl ab bzw. legt diesen fest
getUnit()
/ setUnit(unit)
: ruft den Einheitenteil der Zahl ab bzw. legt diesen fest
getValue()
/ setValue(value)
: ruft die eingeschlossene Zeichenfolge ab bzw. legt diese fest
getR()
/ setR(value)
: rote Komponente (Ganzzahl von 0
bis 255
)
getG()
/ setG(value)
: grüne Komponente (Ganzzahl von 0
bis 255
)
getB()
/ setB(value)
: blaue Komponente (Ganzzahl von 0
bis 255
)
getA()
/ setA(value)
: Alpha-Komponente (Zahl von 0
bis 1.0
)
Beispiel:
var Color = require('node-sass').types.Color, c1 = neue Farbe(255, 0, 0), c2 = neue Farbe(0xff0088cc);
getValue()
: Ruft den eingeschlossenen booleschen Wert ab
types.Boolean.TRUE
: Singleton-Instanz types.Boolean
, die „true“ enthält
types.Boolean.FALSE
: Singleton-Instanz types.Boolean
, die „false“ enthält
getValue(index)
/ setValue(index, value)
: value
muss selbst eine Instanz eines der Konstruktoren in sass.types
sein.
getSeparator()
/ setSeparator(isComma)
: ob Kommas als Trennzeichen verwendet werden sollen
getLength()
getKey(index)
/ setKey(index, value)
getValue(index)
/ setValue(index, value)
getLength()
types.Null.NULL
: Singleton-Instanz types.Null
.
sass.renderSync({ Daten: '#{headings(2,5)} { color: #08c; }', Funktionen: {'headings($from: 0, $to: 6)': function(from, to) { var i, f = from.getValue(), t = to.getValue(), list = new sass.types .List(t - f + 1); for (i = f; i <= t; i++) {list.setValue(i - f, new sass.types.String('h' + i)); } Rückgabeliste;} }});
Typ: Array
Standard: []
Ein Array von Pfaden, die LibSass durchsuchen kann, um zu versuchen, Ihre @import
-Deklarationen aufzulösen. Bei der Verwendung data
wird die Verwendung dieser empfohlen.
Typ: Boolean
Standard: false
true
Werte ermöglichen die Sass-Einrückungssyntax zum Parsen der Datenzeichenfolge oder -datei.
Hinweis: node-sass/libsass kompiliert eine gemischte Bibliothek aus SCSS- und eingerückten Syntaxdateien (.sass) mit der Standardeinstellung (false), solange die Dateinamen die Erweiterungen .sass und .scss verwenden.
Typ: String
Standard: space
Wird verwendet, um zu bestimmen, ob zum Einrücken Leerzeichen oder Tabulatorzeichen verwendet werden sollen.
Typ: Number
Standard: 2
Maximal: 10
Wird verwendet, um die Anzahl der Leerzeichen oder Tabulatoren zu bestimmen, die zum Einrücken verwendet werden sollen.
Typ: String
Standard: lf
Wird verwendet, um zu bestimmen, ob die Sequenz cr
, crlf
, lf
oder lfcr
für den Zeilenumbruch verwendet werden soll.
Typ: Boolean
Standard: false
Besonderheit: Wenn Sie dies verwenden, sollten Sie auch outFile
angeben, um unerwartetes Verhalten zu vermeiden.
true
Werte deaktivieren die Einbeziehung von Quellkarteninformationen in die Ausgabedatei.
Typ: String | null
Standard: null
Besonderheit: Erforderlich, wenn sourceMap
ein wahrer Wert ist
Geben Sie den beabsichtigten Speicherort der Ausgabedatei an. Wird bei der Ausgabe von Quellkarten dringend empfohlen, damit diese ordnungsgemäß auf die beabsichtigten Dateien zurückgreifen können.
Achtung: Wenn Sie diese Option aktivieren, wird die Datei nicht für Sie auf die Festplatte geschrieben, sondern dient nur internen Referenzzwecken (zum Beispiel zum Generieren der Karte).
Beispiel, wie man es auf die Festplatte schreibt
sass.render({...outFile: yourPathTotheFile, }, function(error, result) { // Callback im Knotenstil ab v3.0.0 if(!error){ // Keine Fehler während der Kompilierung, schreiben Sie dieses Ergebnis auf die Festplatte fs.writeFile(yourPathTotheFile, result.css, function (err){if(!err){ //Datei auf Festplatte geschrieben} });} });});
Typ: String
Standard: nested
Werte: nested
, expanded
, compact
, compressed
Bestimmt das Ausgabeformat des endgültigen CSS-Stils.
Typ: Integer
Standard: 5
Wird verwendet, um zu bestimmen, wie viele Nachkommastellen zulässig sind. Wenn Sie beispielsweise eine Dezimalzahl von 1.23456789
und eine Genauigkeit von 5
hatten, lautet das Ergebnis im endgültigen CSS 1.23457
.
Typ: Boolean
Standard: false
true
Aktiviert die Ausgabe der Zeilennummer und der Datei, in der ein Selektor definiert ist, als Kommentar in das kompilierte CSS. Nützlich zum Debuggen, insbesondere bei der Verwendung von Importen und Mixins.
Typ: Boolean | String | undefined
Standard: undefined
Ermöglicht die Generierung der Quellkarte während render
und renderSync
.
Wenn sourceMap === true
, wird der Wert von outFile
als Zielausgabeort für die Quellzuordnung mit angehängtem Suffix .map
verwendet. Wenn kein outFile
festgelegt ist, wird der Parameter sourceMap
ignoriert.
Wenn typeof sourceMap === "string"
, wird der Wert von sourceMap
als Schreibort für die Datei verwendet.
Typ: Boolean
Standard: false
true
schließt den contents
der Quellkarteninformationen ein
Typ: Boolean
Standard: false
true
bettet die Quellzuordnung als Daten-URI ein
Typ: String
Standard: undefined
Der Wert wird als sourceRoot
in den Quellkarteninformationen ausgegeben
render
Callback (>= v3.0.0) node-sass unterstützt asynchrone Rückrufe im Standardknotenstil mit der Signatur function(err, result)
. Unter Fehlerbedingungen wird das error
mit dem Fehlerobjekt gefüllt. Unter Erfolgsbedingungen wird das result
mit einem Objekt gefüllt, das das Ergebnis des Renderaufrufs beschreibt.
message
(String) – Die Fehlermeldung.
line
(Nummer) – Die Zeilennummer des Fehlers.
column
(Nummer) – Die Spaltennummer des Fehlers.
status
(Zahl) – Der Statuscode.
file
(String) – Der Dateiname des Fehlers. Falls die file
nicht festgelegt wurde (zugunsten von data
), spiegelt dies den Wert stdin
wider.
css
(Puffer) – Das kompilierte CSS. Schreiben Sie dies in eine Datei oder stellen Sie es bei Bedarf bereit.
map
(Puffer) – Die Quellkarte
stats
(Objekt) – Ein Objekt, das Informationen über die Kompilierung enthält. Es enthält die folgenden Schlüssel:
entry
(String) – Der Pfad zur SCSS-Datei oder data
, wenn die Quelle keine Datei war
start
(Number) – Date.now() vor der Kompilierung
end
(Number) – Date.now() nach der Kompilierung
duration
(Anzahl) – Ende – Anfang
includedFiles
(Array) – Absolute Pfade zu allen zugehörigen SCSS-Dateien in keiner bestimmten Reihenfolge.
var sass = require('node-sass');sass.render({ Datei: '/path/to/myFile.scss', Daten: 'body{background:blue; a{color:black;}}', importer: function(url, prev, done) {// URL ist der Pfad im Import, wie er ist, den LibSass gefunden hat.// prev ist der zuvor aufgelöste Pfad.// done ist ein optionaler Rückruf, der ihn entweder konsumiert oder synchron einen Wert zurückgibt .// this.options enthält diesen Options-Hash, this.callback enthält den Callback im Node-StilsomeAsyncFunction(url, prev, function(result){ done({file: result.path, // nur einer davon ist erforderlich, siehe Abschnitt Spezielle Verhaltensweisen.contents: result.data });});// ORvar result = someSyncFunction(url, prev);return {file: result.path, content: result.data}; }, includePaths: [ 'lib/', 'mod/' ], OutputStyle: 'compressed'}, function(error, result) { // Rückruf im Node-Stil ab Version 3.0.0 if (error) {console.log(error.status); // war früher „Code“ in v2x und darunterconsole.log(error.column);console.log(error.message);console.log(error.line); } else {console.log(result.css.toString());console.log(result.stats);console.log(result.map.toString());// oder betterconsole.log(JSON.stringify(result. Karte)); // Hinweis: JSON.stringify akzeptiert auch Buffer }});// ORvar result = sass.renderSync({ Datei: '/path/to/file.scss', Daten: 'body{background:blue; a{color:black;}}', Ausgabestil: 'komprimiert', outFile: '/to/my/output.css', sourceMap: true, // oder ein absoluter oder relativer (zu outFile) Pfad importer: function(url, prev, done) {// URL ist der Pfad im Import, wie er ist, den LibSass gefunden hat.// prev ist der zuvor aufgelöste Pfad.// done ist ein optionaler Rückruf, der ihn entweder konsumiert oder synchron einen Wert zurückgibt .// this.options enthält diese Optionen hashsomeAsyncFunction(url, prev, function(result){ done({file: result.path, // nur eine davon ist erforderlich, siehe Abschnitt Special Behaviours.contents: result.data });});// ORvar result = someSyncFunction(url, prev);return {file: result.path, content: result.data}; }});console.log(result.css);console.log(result.map);console.log(result.stats);
Für den Fall, dass sowohl file
als auch data
festgelegt sind, gibt Node-Sass den data
Vorrang und verwendet file
um Pfade in Quellkarten zu berechnen.
Sowohl node-sass
als auch libsass
-Versionsinformationen werden jetzt über die info
Methode verfügbar gemacht:
var sass = require('node-sass');console.log(sass.info);/* es wird etwas ausgegeben wie: node-sass 2.0.1 (Wrapper) [JavaScript] libsass 3.1.0 (Sass Compiler) [ C/C++]*/
Da node-sass >=v3.0.0 die LibSass-Version zur Laufzeit bestimmt wird.
Auflistung der Community-Verwendungen von Node-Sass in Build-Tools und Frameworks.
@jasonsanjose hat eine Brackets-Erweiterung basierend auf Node-Sass erstellt: https://github.com/jasonsanjose/brackets-sass. Beim Bearbeiten von Sass-Dateien kompiliert die Erweiterung die Änderungen beim Speichern. Die Erweiterung lässt sich auch in die Live-Vorschau integrieren, um Sass-Änderungen im Browser anzuzeigen, ohne sie zu speichern oder zu kompilieren.
Das offizielle Sass-Plugin von Brunch verwendet standardmäßig Node-Sass und greift automatisch auf Ruby zurück, wenn die Verwendung von Compass erkannt wird: https://github.com/brunch/sass-brunch
Kompilieren Sie .scss
Dateien für Connect- und Express-basierte HTTP-Server automatisch neu.
Diese Funktionalität wurde in node-sass-middleware
verschoben
@10xLaCroixDrinker hat ein DocPad-Plugin geschrieben, das .scss
Dateien mit Node-Sass kompiliert: https://github.com/docpad/docpad-plugin-nodesass
@stephenway hat eine Erweiterung erstellt, die Sass mithilfe von Node-Sass mit duo.js https://github.com/duojs/sass in CSS transpiliert
@sindresorhus hat eine Reihe von Grunt-Aufgaben basierend auf Node-Sass erstellt: https://github.com/sindresorhus/grunt-sass
@dlmanning hat ein Gulp-Sass-Plugin basierend auf Node-Sass erstellt: https://github.com/dlmanning/gulp-sass
Der Harp-Webserver von @sintaxi kompiliert implizit .scss
Dateien mit Node-Sass: https://github.com/sintaxi/harp
@stevenschobert hat ein Metalsmith-Plugin basierend auf Node-Sass erstellt: https://github.com/stevenschobert/metalsmith-sass
@fourseven hat ein Meteor-Plugin basierend auf Node-Sass erstellt: https://github.com/fourseven/meteor-scss
@dbashford hat ein Mimosa-Modul für Sass erstellt, das Node-Sass enthält: https://github.com/dbashford/mimosa-sass
Eine Beispiel-Connect-App gibt es auch hier: https://github.com/andrew/node-sass-example
Node-Sass enthält vorkompilierte Binärdateien für gängige Plattformen. Um eine Binärdatei für Ihre Plattform hinzuzufügen, befolgen Sie diese Schritte:
Schauen Sie sich das Projekt an:
git clone --recursive https://github.com/sass/node-sass.gitcd node-sass npm installieren node scripts/build -f # Verwenden Sie den Schalter -d für die Debug-Version. Wenn dies erfolgreich ist, wird die Binärdatei generiert und in das Herstellerverzeichnis verschoben.
Die Schnittstelle für die Befehlszeilennutzung ist zu diesem Zeitpunkt recht einfach, wie im folgenden Abschnitt zur Verwendung zu sehen ist.
Die Ausgabe wird an stdout gesendet, wenn das Flag --output
weggelassen wird.
node-sass [options] [output]
Oder: cat | node-sass > output
Beispiel:
node-sass src/style.scss dest/style.css
Optionen:
-w, --watch Überwacht ein Verzeichnis oder eine Datei -r, --recursive Verzeichnisse oder Dateien rekursiv überwachen -o, --output Ausgabeverzeichnis -x, --omit-source-map-url Kommentar zur Quellkarten-URL aus der Ausgabe weglassen -i, --indented-syntax Daten von stdin als Sass-Code behandeln (im Gegensatz zu scss) -q, --quiet Protokollausgabe außer bei Fehler unterdrücken -v, --version Gibt Versionsinformationen aus --output-style CSS-Ausgabestil (verschachtelt | erweitert | kompakt | komprimiert) --indent-type Einzugstyp für Ausgabe-CSS (Leerzeichen | Tab) --indent-width Einzugsbreite; Anzahl der Leerzeichen oder Tabulatoren (Maximalwert: 10) --linefeed Zeilenvorschubstil (cr | crlf | lf | lfcr) --source-comments Fügt Debug-Informationen in die Ausgabe ein --source-map Quellkarte ausgeben --source-map-contents Inhalte in die Karte einbetten --source-map-embed Einbetten von sourceMappingUrl als Daten-URI --source-map-root Basispfad, wird unverändert in der Quellzuordnung ausgegeben --include-path Pfad zum Suchen nach importierten Dateien --follow Symlinkierten Verzeichnissen folgen --precision Die in Dezimalzahlen zulässige Genauigkeit --error-bell Gibt bei Fehlern ein Glockenzeichen aus --importer Pfad zur .js-Datei, die den benutzerdefinierten Importer enthält --functions Pfad zur .js-Datei mit benutzerdefinierten Funktionen --help Nutzungsinformationen drucken
Die input
kann entweder eine einzelne .scss
oder .sass
oder ein Verzeichnis sein. Wenn es sich bei der Eingabe um ein Verzeichnis handelt, muss auch das Flag --output
angegeben werden.
Beachten Sie außerdem, dass --importer
den Pfad (absolut oder relativ zum pwd) zu einer JS-Datei verwendet, für die ein module.exports
auf die Importerfunktion festgelegt sein muss. Sehen Sie sich zum Beispiel unsere Testvorrichtungen an.
Die Option --source-map
akzeptiert einen booleschen Wert und ersetzt in diesem Fall die Zielerweiterung durch .css.map
. Es akzeptiert auch den Pfad zur .map
Datei und sogar den Pfad zum gewünschten Verzeichnis. Beim Kompilieren eines Verzeichnisses kann --source-map
entweder ein boolescher Wert oder ein Verzeichnis sein.
node-sass unterstützt verschiedene Konfigurationsparameter, um Einstellungen im Zusammenhang mit der Sass-Binärdatei zu ändern, z. B. Binärname, Binärpfad oder alternativer Downloadpfad. Folgende Parameter werden von node-sass unterstützt:
Variablenname | .npmrc-Parameter | Prozessargument | Wert |
---|---|---|---|
SASS_BINARY_NAME | sass_binary_name | --sass-binärer-Name | Weg |
SASS_BINARY_SITE | sass_binary_site | --sass-binary-site | URL |
SASS_BINARY_PATH | sass_binary_path | --sass-binary-path | Weg |
SASS_BINARY_DIR | sass_binary_dir | --sass-binary-dir | Weg |
SASS_REJECT_UNAUTHORIZED | sass_reject_unauthorized | --sass-reject-unauthorized | Wert |
Diese Parameter können als Umgebungsvariable verwendet werden:
Beispiel: export SASS_BINARY_SITE=http://example.com/
Als lokale oder globale .npmrc-Konfigurationsdatei:
ZB sass_binary_site=http://example.com/
Als Prozessargument:
ZB npm install node-sass --sass-binary-site=http://example.com/
Wenn Sie selbstsignierte Zertifikate für Ihre Binärdatei verwenden, überschreibt SASS_REJECT_UNAUTHORIZED
(rejectUnauthorized)[https://nodejs.org/docs/latest/api/tls.html#tls_tls_createserver_options_secureconnectionlistener].
Install führt nur zwei Mocha-Tests durch, um zu sehen, ob Ihr Computer das vorgefertigte LibSass verwenden kann, was bei der Installation etwas Zeit spart. Wenn irgendwelche Tests fehlschlagen, wird der Build aus dem Quellcode erstellt.
Dieses Modul wird Ihnen von den folgenden Personen zur Verfügung gestellt und gepflegt:
Michael Mifsud – Projektleiter (Github / Twitter)
Andrew Nesbitt (Github / Twitter)
Dean Mao (Github / Twitter)
Brett Wilkins (Github / Twitter)
Keith Cirkel (Github / Twitter)
Laurent Goderre (Github / Twitter)
Nick Schonning (Github / Twitter)
Adeel Mujahid (Github / Twitter)
Wir <3 unserer Mitwirkenden! Ein besonderer Dank geht an alle, die etwas Entwicklerzeit in dieses Projekt investiert haben. Wir wissen Ihre harte Arbeit sehr zu schätzen. Eine vollständige Liste dieser Personen finden Sie hier.
Schauen Sie sich unseren Beitragsleitfaden an
Copyright (c) 2015 Andrew Nesbitt. Einzelheiten finden Sie unter LIZENZ.