2015-09-09 13 views
80

Cerco di fare un gulp compilare il mio sass quindi autoprefixit con gulp-autoprefixer ma sto ricevendo un errore.Gulp-autoprefixer throwing ReferenceError: Promise is not defined

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')); 
}); 

Sto cercando di eseguire questo Gulpfile.js e sto usando:

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

e NPM versione 1.3.10

quando corro gulp test ottengo questo:

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

Non so davvero cosa sto sbagliando. Non funziona quando uso sass o plain css. Penso che sia qualcosa con i miei file.

+1

Non è sicuro che cosa ha a che fare con Sass (o CSS), quando l'errore viene generato da Autoprefixer. – cimmanon

+2

Non sono sicuro se questa sia la soluzione o meno .... ma la versione di NPM non è aggiornata. Prova ad aggiornare npm e tutti i tuoi pacchetti, mi sono imbattuto in strane stranezze come questa prima durante l'esecuzione di versioni precedenti. –

risposta

65

I node.js aggiornati alla versione più recente utilizzando:

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

per la mia macchina Ubuntu, come mostrato here.

Dopo che ho aggiornato NPM utilizza:

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

Come mostrato here.

Ora il gulp-autoprefixer inizia a funzionare ma ho ricevuto un errore da gulp-sass. Ho aggiornato utilizzando questa istruzione:

  1. Eliminare i node_modules cartella
  2. Remove gulp-sass dal file package.json
  3. Remove nodo-sass dal file package.json (se lo avete in là)
  4. Run NPM installare gulp-sass --save-dev
  5. Aggiornamento compito vostro Gulp come richiesto

Trovato here .Ora ho "gulp-sass": "^2.0.4" e questo ha risolto tutti i miei problemi.

Grazie per il consiglio e l'aiuto.

+11

È possibile ottenere 'node-sass' che funziona con' npm rebuild node-sass' dopo l'aggiornamento del nodo. – xiuyuan

+0

ha funzionato alla grande. Grazie. anche il messaggio della console chiede di eseguire questo comando quando si verifica un errore durante l'esecuzione dell'attività –

+1

Questo è davvero un problema di versione NodeJS, vedere https://github.com/sindresorhus/gulp-autoprefixer/issues/45 – tricasse

78

Aveva lo stesso problema. Per me, il nodo aggiornamento non ha funzionato, ma l'aggiunta di questo proprio all'inizio del mio gulpfile ha fatto:

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

Questo ha risolto il problema per me. –

+2

Questo ha funzionato anche per me. Qualche idea del perché? – Barryman9000

+0

Che cosa è successo l'hack? Ieri tutto stava funzionando correttamente ... –

29

Installare ES6-promessa nel ur posizione progetto in cui esiste package.json

npm install es6-promise 

poi fare la prima linea dei vostri gulpfile.js essere il seguente codice:

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

questo non risponde direttamente alla domanda, ma potrebbe essere utile per le persone che ricevono questo errore quando si tenta di eseguire il ionica 2 tutorial.

Come indicato da altre risposte, il problema è che manca es6-promise.

ho ottenuto lo stesso errore quando si tenta di avviare il tutorial ionica 2 (https://github.com/driftyco/ionic2-starter-tutorial): (la mia versione ionica 2 è 2.0.0-beta.25 e ultima esercitazione commettere è ed9ef2fcce887e4d1c08c375c849b06b8394bad7)

Questa è la pila tracciare ho avuto quando si tenta di eseguire l'applicazione con 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) 

Anche in questo caso, come sottolineato da altre risposte, questo è il modo per risolvere questo:

  1. modificare gulpfile.js e aggiungere in linea 6: require('es6-promise').polyfill();

  2. installare la dipendenza mancante con: npm install es6-promise --save

Dopo questo cambia, il problema è stato risolto e sono stato in grado di avviare il server locale .

+0

Questo ha risolto il problema per me, tutto quello che dovevo fare era usare l'installazione di npm es6-promise con il - salva, e usa questo richiede con .pollyfill, usando .Promise() come in un awnser sopra non ha funzionato per me. – killstreet

Problemi correlati