Gulp-Autoprefixer löst ReferenceError aus: Versprechen ist nicht definiert

81

Ich versuche, einen Schluck dazu zu bringen, meinen Sass zu kompilieren und dann automatisch zu fixieren, gulp-autoprefixeraber ich erhalte eine Fehlermeldung.

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 dies auszuführen Gulpfile.jsund ich benutze:

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

und NPM-Version 1.3.10

Wenn ich gulp testrenne, bekomme ich folgendes:

/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.

Matei
quelle
1
Ich bin mir nicht sicher, was dies mit Sass (oder CSS) zu tun hat, wenn der Fehler von Autoprefixer ausgelöst wird.
Cimmanon
2
Ich bin mir nicht sicher, ob dies die Lösung ist oder nicht ... aber Ihre NPM-Version ist veraltet. Versuchen Sie, npm und alle Ihre Pakete zu aktualisieren. Ich bin zuvor auf seltsame Macken wie diese gestoßen, während ich ältere Builds ausgeführt habe.
Benjamin Solum

Antworten:

78

Hatte das gleiche Problem. Für mich hat das Aktualisieren des Knotens nicht funktioniert, aber das Hinzufügen am Anfang meiner Gulpfile hat Folgendes bewirkt:

require('es6-promise').polyfill();
Chris Searles
quelle
Dies ist ein guter "Hotfix". Die bessere Lösung besteht darin, node.js zu aktualisieren (siehe die Antwort von @Matei)
Mark
1
@MonkeyKing Wie ich in meiner Antwort sagte, hat das Aktualisieren des Knotens das Problem nicht gelöst
Chris Searles
4
Welches Paket? Ich bekommecannot find module es6-promise
Victor
3
@ Victor versuchen, npm install es6-promisein Ihrem Terminal zu laufen
Michael
66

Ich habe node.js auf die neueste Version aktualisiert, indem ich:

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

für meine Ubuntu-Maschine, wie hier gezeigt .

Danach habe ich NPM aktualisiert mit:

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

Wie hier gezeigt .

Jetzt fängt der gulp-autoprefixeran zu arbeiten aber ich habe einen Fehler von bekommen gulp-sass. Ich habe es mit dieser Anleitung aktualisiert:

  1. Löschen Sie Ihren Ordner node_modules
  2. Entfernen Sie gulp-sass aus Ihrer package.json-Datei
  3. Entfernen Sie node-sass aus Ihrer package.json-Datei (falls vorhanden)
  4. Führen Sie npm install gulp-sass --save-dev aus
  5. Aktualisieren Sie Ihre Gulp-Aufgabe nach Bedarf

Gefunden hier. Jetzt habe ich "gulp-sass": "^2.0.4"und dies hat alle meine Probleme behoben.

Vielen Dank für Rat und Hilfe.

Matei
quelle
11
Sie können erhalten node-sassArbeiten mit npm rebuild node-sassnach dem Upgrade - Knoten.
Hugh Grigg
hat einfach super funktioniert. Vielen Dank. Außerdem fordert die Konsolennachricht Sie auf, diesen Befehl auszuführen, wenn beim Ausführen der Aufgabe ein Fehler
auftritt
1
Dies ist in der Tat ein NodeJS-Versionsproblem, siehe github.com/sindresorhus/gulp-autoprefixer/issues/45
Tricasse
Gute Anweisungen. OS-agnostisch Anweisungen finden Sie unter nodesource.com/services/upgrade-self-service
Kröte
Ich brauchte diese Schritte nicht: sudo npm cache clean -f sudo npm install -g n sudo n stableund habe das npm rebuild node-sassNode-Sass-Problem behoben. :)
Edu Ruiz
29

Installieren Sie es6-versprechen an Ihrem Projektspeicherort, an dem package.json vorhanden ist

npm install es6-promise

Machen Sie dann die erste Zeile Ihrer gulpfile.js zum folgenden Code:

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

Dies beantwortet die Frage nicht direkt, kann jedoch für Personen nützlich sein, die diesen Fehler erhalten, wenn sie versuchen, das ionic 2-Lernprogramm auszuführen.

Wie aus anderen Antworten hervorgeht, es6-promisefehlt das Problem .

Beim Versuch, das ionic 2-Lernprogramm ( https://github.com/driftyco/ionic2-starter-tutorial ) zu starten, ist der gleiche Fehler aufgetreten: (Meine ionic 2-Version ist 2.0.0-beta.25 und das neueste Commit für das Lernprogramm lautet ed9ef2fcce887e4d1c08c375c849b06b8394bad7 )

Dies ist die Stapelverfolgung, die ich beim Versuch erhalten habe, die App auszuführen mit ionic serve:

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) 

Wie aus anderen Antworten hervorgeht, können Sie dies wie folgt lösen:

  1. bearbeiten Sie gulpfile.js und fügen Sie in Zeile 6 hinzu: 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.

Stitakis
quelle
Dies hat das Problem für mich behoben. Alles, was ich tun musste, war, das npm install es6-versprechen mit --save zu verwenden und dieses Erfordernis mit .pollyfill zu verwenden. Die Verwendung von .Promise () wie in einem Markisen oben hat bei mir nicht funktioniert.
Killstreet