Gulp-AutoprefixerがReferenceErrorをスローします:Promiseが定義されていません


81

gulpで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またはplaincssを使用すると機能しません。私のファイルには何かがあると思います。


1
Autoprefixerによってエラーがスローされている場合、これがSass(またはCSS)と何の関係があるのか​​わかりません。
cimmanon 2015

2
これが解決策かどうかはわかりませんが、NPMのバージョンが古くなっています。npmとすべてのパッケージを更新してみてください。以前、古いビルドを実行しているときに、このような奇妙な癖に遭遇しました。
ベンジャミンソルム2015

回答:


78

同じ問題がありました。私の場合、ノードの更新は機能しませんでしたが、gulpfileの最初にこれを追加すると機能しました。

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

これは優れた「ホットフィックス」です。より良い解決策はnode.jsを更新することです(@Mateiの回答を参照)
Mark

1
@MonkeyKingは私の答えで言ったように、ノードを更新しても問題は解決しませんでした
Chris Searles 2016

4
どのパッケージ?私が得るcannot find module es6-promise
ビクター

3
@Victorをnpm install es6-promiseターミナルで実行してみてください
Michael

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. package.jsonファイルからgulp-sassを削除します
  3. package.jsonファイルからnode-sassを削除します(そこにある場合)
  4. npm install gulp-sass--save-devを実行します
  5. 必要に応じてGulpタスクを更新します

ここで見つかりました。今私は持っています"gulp-sass": "^2.0.4"、そしてこれは私のすべての問題を修正しました。

アドバイスと助けをありがとう。


11
ノードをアップグレードnode-sassしたnpm rebuild node-sass後、作業を開始できます。
ヒューグリッグ葛修远2015

うまくいきました。ありがとう。また、タスクの実行中にエラーが発生した場合は、コンソールメッセージでこのコマンドを実行するように求められます
Pushpak Patel 2015

1
これは確かにNodeJSバージョンの問題です。github.com
sindresorhus /

良い指示。OSに依存しない手順は、nodesource.com / services / upgrade
toad

私はそれらのステップを必要としませんでした:sudo npm cache clean -f sudo npm install -g n sudo n stableそしてnpm rebuild node-sassnode-sass問題を修正するために使用されました。:)
Edu Ruiz

29

package.jsonが存在するプロジェクトの場所にes6-promiseをインストールします

npm install es6-promise

次に、gulpfile.jsの最初の行を次のコードにします。

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

2

これは質問に直接答えるものではありませんが、ionic2チュートリアルを実行しようとしたときにこのエラーが発生した場合に役立つ可能性があります。

他の回答で指摘されているように、問題はそれ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-promiseを--saveとともに使用し、このrequireを.pollyfillとともに使用し、上記のawnserのように.Promise()を使用することだけでした。
killstreet 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.