Gulp-autoprefixer ReferenceError atıyor: Promise tanımlanmadı


81

Bir yudum sassımı derleyip sonra autoprefixit ile derlemeye çalışıyorum gulp-autoprefixerama bir hata alıyorum.

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

Bunu çalıştırmaya çalışıyorum Gulpfile.jsve kullanıyorum:

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

ve NPM versiyonu 1.3.10

Koştuğumda şunu alıyorum gulp test:

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

Neyi yanlış yaptığımı gerçekten bilmiyorum. Sass veya düz css kullandığımda çalışmıyor. Sanırım dosyalarımda bir şey var.


1
Hata Autoprefixer tarafından atıldığında, bunun Sass (veya bu konuda CSS) ile ne ilgisi olduğundan emin değilim.
— cimmanon

2
Bunun çözüm olup olmadığından emin değilim .... ama NPM sürümünüz güncel değil. Npm'yi ve tüm paketlerinizi güncellemeyi deneyin, daha önce eski sürümleri çalıştırırken bunun gibi tuhaf tuhaflıklar ile karşılaştım.
— Benjamin Solum

Yanıtlar:


78

Aynı sorunu yaşadım. Benim için, güncelleme düğümü işe yaramadı, ancak bunu gulpfile'ımın en başına eklemek:

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

Bu iyi bir "düzeltme", daha iyi bir çözüm node.js upate (@Matei cevabını bakınız) olduğu
— Mark

1
@MonkeyKing, cevabımda söylediğim gibi, düğümün güncellenmesi sorunu çözmedi
— Chris Searles

4
ne paketi? Anlıyorumcannot find module es6-promise
— Victor

3
@Victor npm install es6-promiseterminalinizde koşmayı deneyin
— Michael

66

Aşağıdakileri kullanarak node.js'yi en son sürüme güncelledim:

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

Ubuntu makinem için burada gösterildiği gibi .

Bundan sonra NPM'yi şu şekilde güncelledim:

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

Gibi gösterilen burada .

Şimdi gulp-autoprefixerçalışmaya başladım ama bir hata aldım gulp-sass. Bu talimatı kullanarak güncelledim:

  1. Node_modules klasörünüzü silin
  2. Gulp-sass dosyasını package.json dosyanızdan kaldırın
  3. Node-sass'ı package.json dosyanızdan kaldırın (eğer varsa)
  4. Npm install gulp-sass --save-dev komutunu çalıştırın
  5. Gulp görevinizi gerektiği gibi güncelleyin

Bulunan burada ben var .Şimdi "gulp-sass": "^2.0.4"ve bu tüm sorunlarımı düzeltildi.

Tavsiye ve yardım için teşekkürler.


11
Düğümü yükselttikten sonra node-sassçalışmaya başlayabilirsiniz npm rebuild node-sass.
— Hugh -Grigg

sadece harika çalıştı. Teşekkürler. ayrıca konsol mesajı, görevi çalıştırırken bir hatayla karşılaştığınızda bu komutu çalıştırmanızı ister
— Pushpak Patel

1
Bu gerçekten bir NodeJS sürüm sorunu, bkz. Github.com/sindresorhus/gulp-autoprefixer/issues/45
— tricasse

İyi talimatlar. İşletim sisteminden bağımsız talimatlar nodesource.com/services/upgrade-self-service
— toad

Bu adımlara ihtiyacım yoktu: sudo npm cache clean -f sudo npm install -g n sudo n stableve npm rebuild node-sassnode-sass problemini çözmek için kullanılır . :)
— Edu Ruiz

29

Package.json'un bulunduğu proje konumuna es6-promise'ı kurun

npm install es6-promise

Ardından, gulpfile.js kodunuzun ilk satırını aşağıdaki kod yapın:

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

2

Bu, soruyu doğrudan yanıtlamaz, ancak ionic 2 eğitimini çalıştırmaya çalışırken bu hatayı alan kişiler için yararlı olabilir.

Diğer cevapların da işaret ettiği gibi, sorun es6-promiseeksiktir.

İonic 2 öğreticisini başlatmaya çalışırken aynı hatayı aldım ( https://github.com/driftyco/ionic2-starter-tutorial ): (ionic 2 sürümüm 2.0.0-beta.25 ve en son eğitici kaydetme ed9ef2fcce887e4d1c08c375c849b06b8394bad7 )

Bu, uygulamayı çalıştırmaya çalışırken aldığım yığın izidir 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) 

Yine, diğer cevapların da işaret ettiği gibi, bunu şu şekilde çözebilirsiniz:

  1. gulpfile.js dosyasını düzenleyin ve 6. satıra ekleyin: require('es6-promise').polyfill();

  2. eksik bağımlılığı şununla yükleyin: npm install es6-promise --save

Bu değişikliklerden sonra sorun çözüldü ve yerel sunucuyu başlatabildim.


Bu benim için sorunu çözdü, tek yapmam gereken --save ile npm install es6-promise'ı kullanmak ve bunu .pollyfill ile kullanmaktı, yukarıdaki bir tentede olduğu gibi .Promise () kullanarak benim için işe yaramadı.
— killstreet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.