autoprefixer と postcss を使用していて、新しい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
私の問題は何でしょうか?
私はこれがなぜ起こっているのか答えられませんが、すべてのnpmパッケージを再インストールした後、私はまだ同じエラーを抱えていたので、この非常に古いソリューションを使用してノードにPromiseを「monkeypatch」します:
npm install es6-promise
次に、コードを追加します。
var Promise = require('es6-promise').Promise;
そして、それは問題を「解決」しました。
編集(1年後):人々はまだこの答えを支持しているので、これに遭遇した人に指摘したいのですが、質問は多くの意見を得ており、一般的な問題のようです私が後で行った推論は、合理的な説明は、約束が導入される前に構築されたライブラリの1つ(おそらく多くのライブラリがこれと同じことを行う)であり、手動で実装され、Nodeは、約束を公式にサポートするために更新されました。
何らかの理由で(古いサーバーの保守を避けるために必要な場合がある)保守ライブラリのレガシーバージョンを実行している場合や、保守されていない古いライブラリの現在のバージョンを実行している場合があります。いずれにせよ、このソリューションはうまくいくようです。
ノードを最新バージョン(v4.5.0)にアップグレードすると、この問題は解決しました。