Викидання автоматичного префікса Gulp ReferenceError: Обіцянка не визначена


81

Я намагаюся згладити компіляцію мого sass, gulp-autoprefixerа потім автопрефіксувати, але я отримую помилку.

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

Я намагаюся запустити це, Gulpfile.jsі я використовую:

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

та версія NPM 1.3.10

Коли я запускаю, 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)

Я насправді не знаю, що я роблю не так. Не працює, коли я використовую sass або звичайний css. Я думаю, це щось із моїми файлами.


1
Не знаю, яке відношення це має до Sass (або CSS), коли помилку видає Autoprefixer.
cimmanon

2
Не впевнений, це рішення чи ні .... але ваша версія NPM застаріла. Спробуйте оновити npm та всі ваші пакунки, я раніше стикався із дивними примхами під час запуску старих збірок.
Бенджамін Солум

Відповіді:


78

Був той самий випуск. Для мене оновлення вузла не спрацювало, але додавши це на самому початку мого gulpfile:

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

Це хороше "виправлення", кращим рішенням є завантаження node.js (див. Відповідь @Matei)
Марк

1
@MonkeyKing, як я вже сказав у своїй відповіді, оновлення вузла не вирішило проблему
Кріс Сірлз

4
який пакет? Я отримуюcannot find module es6-promise
Віктор

3
@Victor спробуйте запустити npm install es6-promiseу своєму терміналі
Майкл

66

Я оновив node.js до останньої версії, використовуючи:

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

для моєї машини Ubuntu, як показано тут .

Після цього я оновив NPM, використовуючи:

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

Як показано тут .

Тепер gulp-autoprefixerпочати працювати, але я отримав повідомлення про помилку gulp-sass. Я оновив його, використовуючи цю інструкцію:

  1. Видаліть папку node_modules
  2. Видаліть gulp-sass з файлу package.json
  3. Видаліть node-sass з файлу package.json (якщо він там є)
  4. Запустіть npm install gulp-sass --save-dev
  5. Оновіть своє завдання Gulp за необхідності

Знайдено тут. Тепер я маю, "gulp-sass": "^2.0.4"і це вирішило всі мої проблеми.

Дякую за пораду та допомогу.


11
Ви можете почати node-sassпрацювати з ним npm rebuild node-sassпісля оновлення вузла.
Hugh Grigg

просто чудово працював. Дякую. також повідомлення консолі просить запустити цю команду при виникненні помилки під час виконання завдання
Pushpak Patel

1
Це справді проблема з версією NodeJS, див. Github.com/sindresorhus/gulp-autoprefixer/issues/45
tricasse

Хороші вказівки. Інструкції щодо агностики ОС можна знайти за адресою nodesource.com/services/upgrade-self-service
жаба

Мені не були потрібні ці кроки: sudo npm cache clean -f sudo npm install -g n sudo n stableі я використовував npm rebuild node-sassдля виправлення проблеми node-sass. :)
Edu Ruiz

29

Встановіть es6-promis у місцезнаходженні ур проекту, де існує package.json

npm install es6-promise

Тоді зробіть перший рядок вашого gulpfile.js таким кодом:

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

2

Це не відповідає безпосередньо на запитання, але може бути корисним для людей, які отримують цю помилку при спробі запустити підручник з ionic 2.

Як вказують інші відповіді, проблема полягає в тому, що es6-promiseїї немає.

Я отримав ту ж помилку при спробі запустити підручник з ionic 2 ( https://github.com/driftyco/ionic2-starter-tutorial ): (моя версія ionic 2 - 2.0.0-beta.25 і остання фіксація підручника ed9ef2fcce887e4d1c08c375c849b06b8394bad7 )

Це трасування стека, яке я отримав при спробі запустити програму за допомогою 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) 

Знову ж таки, як вказують інші відповіді, ось як це вирішити:

  1. відредагуйте gulpfile.js і додайте в рядок 6: require('es6-promise').polyfill();

  2. встановіть відсутність залежності за допомогою: npm install es6-promise --save

Після цих змін проблема була виправлена, і я зміг запустити локальний сервер.


Це вирішило проблему для мене, все, що мені потрібно було зробити, це використовувати npm install es6-promis з --save, і використовувати this require з .pollyfill, використовуючи .Promise (), як у вищезазначеному інструменті, для мене не працювало.
killstreet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.