web-dev-qa-db-ja.com

「約束は定義されていません」と表示されるのはなぜですか。エラーNode v5.7.0

autoprefixerpostcss を使用していて、新しいLinuxサーバーに移動した後、何かが間違っているはずですが、これが何であるかわかりません。エラーが発生しています:

/home/ec2-user/Enviziion/Muveoo/Server/node_modules/postcss/lib/lazy-result.js:157
        this.processing = new Promise(function (resolve, reject) {
                              ^
ReferenceError: Promise is not defined

以下によってトリガーされます:

var autoprefixer = require('autoprefixer');
var postCSS = require('postcss');

function prefix(css, res, type, fullPath) {
    postCSS([autoprefixer]).process(css).then(function(result) {
        var css = result.css;
        var length = css.length;
        res.writeHead(200, {
            'Content-Length' : length,
            'Content-Type' : type
        });
        res.write(css);
        res.end();
    });
}

私はこの問題を調査しましたが、この問題の発生はすべて、node.jsの非常に初期のバージョンで発生しているようです。たとえば:

そして、解決策は常に「ノードの更新」のようです。

しかし、私のものは最新のようです:

[ec2-user@ip-172-31-22-79 Server]$ node -v
v5.7.0

私の問題は何でしょうか?

12
user5536767

私はこれがなぜ起こっているのか答えられませんが、すべてのnpmパッケージを再インストールした後、私はまだ同じエラーを抱えていたので、この非常に古いソリューションを使用してノードにPromiseを「monkeypatch」します:

npm install es6-promise

次に、コードを追加します。

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

そして、それは問題を「解決」しました。

編集(1年後):人々はまだこの答えを支持しているので、これに遭遇した人に指摘したいのですが、質問は多くの意見を得ており、一般的な問題のようです私が後で行った推論は、合理的な説明は、約束が導入される前に構築されたライブラリの1つ(おそらく多くのライブラリがこれと同じことを行う)であり、手動で実装され、Nodeは、約束を公式にサポートするために更新されました。

何らかの理由で(古いサーバーの保守を避けるために必要な場合がある)保守ライブラリのレガシーバージョンを実行している場合や、保守されていない古いライブラリの現在のバージョンを実行している場合があります。いずれにせよ、このソリューションはうまくいくようです。

18
user5536767

ノードを最新バージョン(v4.5.0)にアップグレードすると、この問題は解決しました。

0
Praveen Bijja