13

我将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

我的问题可能在这里?

4

2 回答 2

22

我无法回答为什么会这样,但是在重新安装所有 npm 包后,我仍然遇到同样的错误,所以我使用这个非常古老的解决方案将“monkeypatch”Promises 放入节点:

npm install es6-promise

然后添加代码:

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

这“解决了”问题。

编辑(一年后):人们仍在对这个答案进行投票,所以我只想向遇到这个问题的人指出,这个问题已经得到了很多观点,考虑到它有多奇怪,这似乎是一个常见问题 - 一个推论我后来做出的唯一合理的解释是,我的一个库(可能很多库都做同样的事情)是在引入 Promise 之前构建的,手动实现它们并在 Node 更新以正式支持 Promise 时导致冲突。

无论出于何种原因(有时需要避免维护旧服务器),您都可能正在运行已维护库的旧版本,或者正在运行不再维护的旧库的当前版本。无论哪种方式,这个解决方案似乎都有效。

于 2016-02-25T23:33:52.173 回答
0

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

于 2017-03-31T18:13:40.837 回答