Почему я должен получить "обещание не определено". ошибка на Node v5.7.0

Im использует 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, например:

И решение всегда кажется "Update Node".

Но мой, кажется, обновлен:

[[email protected] Server]$ node -v
v5.7.0

Что может быть здесь?

Ответ 1

Я не могу ответить, почему это происходит, но после переустановки всех пакетов npm у меня все еще была такая же ошибка, поэтому я использовал это очень старое решение для "monkeypatch" Promises в node:

npm install es6-promise

а затем добавьте код:

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

И это "решило" проблему.

Изменить (год спустя): люди по-прежнему голосуют за этот ответ, поэтому я просто хочу указать кому-либо, кто сталкивается с этим, этот вопрос получил тонну взглядов и, похоже, общая проблема, учитывая, насколько это странно - вывод, который я позже сделал, заключался в том, что единственное разумное объяснение состоит в том, что одна из моих библиотек (возможно, многие библиотеки делают то же самое), созданная до того, как Promises была представлена, если бы они были реализованы вручную и вызвали конфликт когда Node был обновлен, чтобы официально поддерживать Promises.

Возможно, вы используете устаревшую версию поддерживаемой библиотеки по любой причине (иногда это необходимо для предотвращения обслуживания старых серверов) или для запуска текущей версии старой библиотеки, которая больше не поддерживается. В любом случае это решение работает.

Ответ 2

Обновление node до последней версии (v4.5.0) разрешило эту проблему.