2016-04-21 2 views
9

In meinem nodeJS-Projekt gibt es plötzlich einen Fehler. Ich mache kein Upgrade oder Änderungen. Wenn ich NPM schreiben beginnen sie in der BefehlszeileFunktionen dürfen nicht innerhalb von Steuerdirektiven oder anderen Mixins definiert werden

dass Fehler geben
ERROR in ./~/css-loader?sourceMap!./~/postcss-loader!./~/sass-loader? 
sourceMap&outputStyle=expanded&includePaths[]=c:/TFS/rc1/app/scss&includePaths[] 

=c:/TFS/rc1/~/compass-mixins/lib&sourceMap&sourceMapContents=true!./app/scss/_toolkit.scss 
    Module build failed: 
    undefined 
    ^
      Functions may not be defined within control directives or other mixins. 
      in c:\TFS\rc1\node_modules\compass-mixins\lib\compass\functions\_lists.scss (line 81, column 3) 
    @ ./app/scss/_toolkit.scss 4:14-337 

I Kompass-Mixins Paket neu installieren, aber es immer noch gleiche error.Then ich _lists.scss diese Datei dort in 81 Linie sah geben ist ein Code .Ich gelöscht, dass es denselben Fehler gibt. Was soll ich tun?

@if not(function-exists(compact)) { 
    @function compact($vars...) { 
    $list:(); 
    @each $var in $vars { 
     @if $var { 
      $list: append($list, $var, comma); 
     } 
    } 
    @return $list; 
    } 
} 
+0

Sie verwenden LibSass oder der offizielle Ruby Sass? – cimmanon

+0

Das ist Reaktion js Projekt nicht Ruby-Projekt.Wie kann ich überprüfen, ob es libsass oder Ruby Sass ist? – user1688401

+1

Ich bin nicht vertraut mit irgendwelchen anderen Sachen, die Sie verwenden, aber für Unix oder Mac OS würde die Ausführung von 'sass -v' im Terminal zumindest bestätigen, dass Sie Ruby Sass installiert haben. – cimmanon

Antwort

1

Ich benutze Gulp. Version 2.3.0 von gulp-sass bricht es. Gehen Sie zurück zu Version 2.2.0 und Sie sind alle behoben.

Edit:

Der wahre Täter ist das Knotenmodul innerhalb der "schluckt-sass" node-Modul als "node-sass" bekannt. Sie können in "gulp-sass" s package.json Datei sehen, dass es einfach die Version größer als^3.5.3 zieht.

Auch wenn Sie zurückgehen und "gulp-sass" auf 2.2.0 neu installieren, wie ich zuvor vorgeschlagen habe, wird die package.json-Datei darin immer noch "node-sass" größer als^3.5.3 ziehen.

Wenn ich die ältere Version von "node-sass" 3.4.2 verwende, verschwindet dieser Fehler. Ich weiß nicht, wie ich das automatisieren kann. Zur Not konnte ich das Problem beheben, indem ich diesen Ordner (der 3.4.2 verwendet) aus einem anderen Projekt kopiere, das funktioniert. Jetzt kompiliert es.

Kann jemand klüger als ich herausfinden, einen besseren Weg, um dieses Ergebnis zu erreichen?

+0

können Sie Befehl geben bitte. Ich bin .net Entwickler ich bin neu am Knoten js-npg environment – user1688401

+0

Können Sie klären, wie dies das Problem löst? Die Fehlermeldung loszuwerden wird nicht helfen, wenn die Funktion in dieser if-Anweisung endet. – cimmanon

+0

Korrigieren. Es "löst" das Problem nicht. Dies ist ein inhärentes Risiko der Verwendung von Knotenmodulen. Jedes Knotenmodul (nicht nur gulp-sass) hat seine eigene package.json-Datei. Das zieht immer mehr als^x.x.x. Auf lange Sicht ist es immer eine schlechte Idee, Code zu forkieren, der an anderer Stelle gepflegt wird. Es löst das Problem für uns heute, was wichtig ist. Das Grundproblem ist jedoch ein inhärentes Risiko, Node (für unsere Zwecke) zu verwenden, da die Kindunterschiede nicht kontrolliert werden können. –

4

Ich habe auch ein ähnliches Problem. Und mein Projekt verwendet gulp-sass und compass-mixins. Wie heart.cooks.mind darauf hinweist, ist gulp-sass abhängig von node-sass. Und node-sass Upgrade eines seiner Abhängigkeit libsass auf Version libsass 3.3.3 Delorean seit node-sass 3.5.1.

jedoch ein von libsass 3.3.3 Delorean Änderungen ist dieses Problem zu tun:
'Disallow functions to be defined in control directives or mixins (@mgreter, #1550)'

Offensichtlich _lists.scss in compass-mixins Bruch dieser Regel. Scheint jemand eine issue zu compass-mixins zu erheben und sie haben Idee, es zu reparieren.

Vor compass-mixins Freigabe das Problem behoben Version, meine vorübergehende Lösung ist node_modules/node-Sass manuell und npm installieren [email protected]

+0

Für diejenigen mit automatisierten Builds ist dies nicht wirklich eine Option. Das Hinzufügen von '" node-sass ":" 3.4.2 "' zu 'devDependencies' in' package.json' ist hier besser. Wenn die brechende Veränderung gelöst ist, entferne einfach diese Linie und du bist gut zu gehen. – GFoley83

2

Ich hatte das gleiche Problem, lesen Sie bitte node sass release 3.5.3 is breaking build und Kraft löschen Sperre Schluck-Sass, um die spezifische Knoten Sass-Bibliothek mit shrinkwrap verwenden und vermeiden die Verwendung der Buggy-Version von Knoten Sass

1

Was ich (vorübergehend), war global Node-Sass v3.4.2 zu installieren, und ersetzen Sie dann den Schluck -sass Version von Node-Sass (es befindet sich in gulp-sass/node_modules) mit diesem älteren.

sudo npm install -g [email protected]; 
sudo cp -r /usr/lib/node_modules/node-sass/ /usr/lib/node_modules/gulp-sass/node_modules/; 
1

Btw, gibt es eine PR waiting to be merged dafür. Aber wenn du das heute nutzen willst, gibt es auch a fork of the merge.
Wenn Sie letztere verwenden möchten, dann setzen Sie einfach compass-mixins: tjenkinson/compass-mixins in Ihre package.json und alles wird gut.

Update: - Es gibt auch ein NPM-Paket für die in den PR jetzt

Update 2 genannten letzteren: - Das soll jetzt mit v0.12.8 kein Problem mehr sein

+0

Upgrade auf 0.12.8 reparierte es für mich. – Nathan

Verwandte Themen