为什么在Node v5.7.0上会出现“Promise is not defined.”错误

rseugnpd  于 2023-01-08  发布在  Node.js
关注(0)|答案(3)|浏览(155)

我使用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

我的问题是什么?

a0zr77ik

a0zr77ik1#

我不能回答为什么会发生这种情况,但重新安装所有npm包后,我仍然有同样的错误,所以我用这个非常旧的解决方案“monkeypatch”承诺到节点:

npm install es6-promise

然后添加代码:

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

这就“解决”了问题。

**编辑(一年后):**人们仍然在投票支持这个答案,所以我只想向任何遇到这个问题的人指出,这个问题已经得到了大量的意见,考虑到它是多么奇怪,似乎是一个常见的问题-我后来做了一个推论,唯一合理的解释是,我的一个库(也许许多库做同样的事情)在承诺引入之前构建,手动实现它们,并在更新Node以正式支持承诺时引起了冲突。

你可能因为某种原因运行一个旧版本的维护库(有时候为了避免维护旧服务器是必须的),或者运行一个不再维护的旧库的当前版本。无论哪种方式,这个解决方案似乎都有效。

kq0g1dla

kq0g1dla2#

将节点升级到最新版本(v4.5.0)确实解决了此问题。

xzlaal3s

xzlaal3s3#

只是为了补充另一个答案,一个帮助我的情况。
如果你正在使用eslint,确保在env config下添加"es6": true

"env": {
        "browser": false,
        "node": true,
        "commonjs": true,
        "es6": true  // add this in
    },

则承诺不应再显示为未定义

相关问题