2015-09-09 4 views
80

Ich versuche, einen Schluck kompilieren meine Sass dann Autoprefixit mit gulp-autoprefixer, aber ich bekomme einen Fehler.Gulp-Autoprefixer werfen ReferenceError: Versprechen ist nicht definiert

var gulp = require('gulp'), 
    sass = require('gulp-sass'), 
    autoprefixer = require('gulp-autoprefixer'); 

gulp.task('test', function(){ 
    gulp.src('_sass/main.sass') 
     .pipe(sass()) 
     .pipe(autoprefixer()) 
     .pipe(gulp.dest('./assets/css')); 
}); 

Ich versuche, dieses Gulpfile.js zu laufen und ich verwende:

"gulp": "~3.9.0", 
"gulp-sass": "~2.0.4", 
"gulp-autoprefixer": "~3.0.1", 

und NPM Version 1.3.10

Wenn ich gulp test laufen bekomme ich diese:

/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:152 
     this.processing = new Promise(function (resolve, reject) { 
          ^
ReferenceError: Promise is not defined 
    at LazyResult.async (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:152:31) 
    at LazyResult.then (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:75:21) 
    at DestroyableTransform._transform (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/index.js:28:13) 
    at DestroyableTransform.Transform._read (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:172:10) 
    at DestroyableTransform.Transform._write (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:160:12) 
    at doWrite (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:326:12) 
    at writeOrBuffer (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:312:5) 
    at DestroyableTransform.Writable.write (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:239:11) 
    at write (/home/matei/Tests/test-4/node_modules/gulp-sass/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:623:24) 
    at flow (/home/matei/Tests/test-4/node_modules/gulp-sass/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:632:7) 

Ich weiß nicht wirklich, was ich falsch mache. Funktioniert nicht, wenn ich Sass oder Plain CSS benutze. Ich denke, ist etwas mit meinen Dateien.

+1

Nicht sicher, was dies mit Sass zu tun hat (oder CSS), wenn der Fehler von Autoprefixer ausgelöst wird. – cimmanon

+2

Nicht sicher, ob dies die Lösung ist oder nicht .... aber Ihre NPM-Version ist veraltet. Versuchen Sie, npm und all Ihre Pakete zu aktualisieren, ich habe schon früher seltsame Macken erlebt, während ich ältere Builds ausgeführt habe. –

Antwort

65

I aktualisiert node.js auf die neueste Version verwenden:

# Using Ubuntu 
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - 
sudo apt-get install -y nodejs 

für meinen Ubuntu-Rechner, wie here gezeigt.

Danach habe ich aktualisiert NPM mit:

sudo npm cache clean -f 
sudo npm install -g n 
sudo n stable 

Wie here gezeigt.

Jetzt die gulp-autoprefixer starten zu arbeiten, aber ich habe einen Fehler von gulp-sass. Ich aktualisiert sie diese Anweisung mit:

  1. Ihre node_modules Ordner löschen
  2. Entfernen schluck-Sass aus Ihrer package.json Datei
  3. Entfernen Knoten-Sass aus Ihrer package.json Datei (wenn Sie es in dort haben)
  4. Run npm schluck-Sass --save-dev
  5. Aktualisieren Sie Ihre Gulp Aufgabe installieren

gefunden here erforderlich .Jetzt i 0 habenund das hat alle meine Probleme behoben.

Danke für Rat und Hilfe.

+11

Nach dem Knoten-Upgrade können Sie 'node-sass' mit' npm rebuild node-sass' arbeiten lassen. – xiuyuan

+0

hat einfach super geklappt. Vielen Dank. Außerdem wird in der Konsolennachricht aufgefordert, diesen Befehl auszuführen, wenn beim Ausführen der Aufgabe –

+1

ein Fehler auftritt. Dies ist in der Tat ein Problem mit der NodeJS-Version, siehe https://github.com/sindresorhus/gulp-autoprefixer/issues/45 – tricasse

78

Hatte das gleiche Problem. Für mich, die Aktualisierung Knoten hat nicht funktioniert, aber das Hinzufügen dieser ganz am Anfang meiner gulpfile tat

require('es6-promise').polyfill(); 
+4

Das löste das Problem für mich. –

+2

Das hat auch für mich funktioniert. Irgendeine Idee warum? – Barryman9000

+0

Was ist gerade passiert? Gestern wurde alles richtig aufgebaut ... –

29

es6-Versprechen in ur-Projekt Montageort so, dass package.json

npm install es6-promise 

Dann existiert machen die erste Zeile Ihres gulpfile.js der folgende Code sein:

var Promise = require('es6-promise').Promise; 
2

sich die Frage nicht direkt beantworten, aber es könnte nützlich für Menschen, die diesen Fehler beim Versuch, die ionische laufen 2 Tutorial.

Wie von anderen Antworten gezeigt, ist das Problem, dass es6-promise fehlt.

ich den gleichen Fehler hätte bei dem Versuch, die ionischen 2 Tutorial (https://github.com/driftyco/ionic2-starter-tutorial) zu starten: (meine ionischen 2-Version ist 2.0.0-beta.25 und aktuelle Tutorial begehen ist ed9ef2fcce887e4d1c08c375c849b06b8394bad7)

Dies ist der Stapel Spuren ich habe bei dem Versuch, die App mit ionic serve auszuführen:

Running 'serve:before' gulp task before serve 
[18:37:00] Starting 'clean'... 
[18:37:01] Finished 'clean' after 1.02 s 
[18:37:01] Starting 'watch'... 
[18:37:01] Starting 'sass'... 
[18:37:01] Starting 'html'... 
[18:37:01] Starting 'fonts'... 
[18:37:01] Starting 'scripts'... 
[18:37:01] Finished 'scripts' after 62 ms 
[18:37:01] Finished 'html' after 72 ms 
[18:37:01] Finished 'fonts' after 77 ms 
Caught exception: 
ReferenceError: Promise is not defined 
    at LazyResult.async (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:157:31) 
    at LazyResult.then (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:79:21) 
    at DestroyableTransform._transform (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/index.js:24:6) 
    at DestroyableTransform.Transform._read (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:159:10) 
    at DestroyableTransform.Transform._write (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:147:83) 
    at doWrite (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:313:64) 
    at writeOrBuffer (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:302:5) 
    at DestroyableTransform.Writable.write (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:241:11) 
    at DestroyableTransform.ondata (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-sass/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:531:20) 
    at DestroyableTransform.EventEmitter.emit (events.js:95:17) 

Wieder, wie durch andere Antworten darauf, dies ist, wie dieses Problem zu lösen:

  1. bearbeiten gulpfile.js und in Zeile 6 hinzuzufügen: require('es6-promise').polyfill();

  2. installieren Sie die fehlende Abhängigkeit mit: npm install es6-promise --save

Nach diesen Änderungen wurde das Problem behoben, und ich konnte den lokalen Server starten .

+0

Dies behoben das Problem für mich, alles was ich tun musste, war die npm installieren es6-Versprechen mit der - Speichern, und verwenden Sie diese Anforderung mit .pollyfill, mit .Promise() wie in einem awnser oben funktioniert nicht für mich. – killstreet