Gulp-autoprefixer抛出ReferenceError:未定义承诺


81

我试着用吞咽的方法编译我的Sass,然后用autoprefixit进行编译,gulp-autoprefixer但出现错误。

var gulp = require('gulp'),
    sass = require('gulp-sass'),
    autoprefixer = require('gulp-autoprefixer');

gulp.task('test', function(){
    gulp.src('_sass/main.sass')
        .pipe(sass())
        .pipe(autoprefixer()) 
        .pipe(gulp.dest('./assets/css')); 
});

我正在尝试运行此命令,Gulpfile.js并且正在使用:

"gulp": "~3.9.0",
"gulp-sass": "~2.0.4",
"gulp-autoprefixer": "~3.0.1",

和NPM版本 1.3.10

当我运行gulp test我得到这个:

/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:152
        this.processing = new Promise(function (resolve, reject) {
                              ^
ReferenceError: Promise is not defined
    at LazyResult.async (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:152:31)
    at LazyResult.then (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:75:21)
    at DestroyableTransform._transform (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/index.js:28:13)
    at DestroyableTransform.Transform._read (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:172:10)
    at DestroyableTransform.Transform._write (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:160:12)
    at doWrite (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:326:12)
    at writeOrBuffer (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:312:5)
    at DestroyableTransform.Writable.write (/home/matei/Tests/test-4/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:239:11)
    at write (/home/matei/Tests/test-4/node_modules/gulp-sass/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:623:24)
    at flow (/home/matei/Tests/test-4/node_modules/gulp-sass/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:632:7)

我真的不知道我在做什么错。当我使用Sass或Plain CSS时不起作用。我认为我的文件中有东西。


1
当Autoprefixer引发错误时,不确定这与Sass(或CSS)有什么关系。
cimmanon 2015年

2
不知道这是否是解决方案...。但是您的NPM版本已过时。尝试更新npm和所有软件包,在运行旧版本之前,我曾遇到过这种奇怪的怪癖。
本杰明·索伦

Answers:


78

有同样的问题。对我来说,更新节点不起作用,但是在我的gulpfile的开头添加了它:

require('es6-promise').polyfill();

这是一个很好的“修补程序”,更好的解决方案是更新node.js(请参见@Matei的答案)
Mark

1
@MonkeyKing就像我在回答中所说的那样,更新节点并不能解决问题
Chris Searles

4
什么包?我得到了cannot find module es6-promise
维克多

3
@Victor尝试npm install es6-promise在您的终端中运行
Michael

66

我使用以下命令将node.js更新为最新版本:

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

对于我的Ubuntu的机器,如图所示这里

之后,我使用以下命令更新了NPM:

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

如图所示这里

现在gulp-autoprefixer开始工作,但是我收到了一个错误消息gulp-sass。我使用以下说明进行了更新:

  1. 删除您的node_modules文件夹
  2. 从package.json文件中删除gulp-sass
  3. 从package.json文件中删除node-sass(如果在其中)
  4. 运行npm install gulp-sass --save-dev
  5. 根据需要更新Gulp任务

这里找到。现在我已经"gulp-sass": "^2.0.4"解决了所有问题。

感谢您的建议和帮助。


11
升级节点后即可node-sass使用npm rebuild node-sass
休格里格葛修远2015年

很好 谢谢。当您在执行任务时遇到错误时,控制台消息也会要求运行此命令
Pushpak Patel

1
这确实是NodeJS
tricasse 2015年

好的指示。与操作系统无关的说明可以在nodesource.com/services/upgrade-self-service
toad

我不需要这些步骤:sudo npm cache clean -f sudo npm install -g n sudo n stable并用于npm rebuild node-sass修复节点无效问题。:)
Edu Ruiz

29

在存在package.json的项目位置安装es6-promise

npm install es6-promise

然后将gulpfile.js的第一行变为以下代码:

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

2

这不能直接回答问题,但是对于尝试运行ionic 2教程时遇到此错误的人可能有用。

正如其他答案所指出的那样,问题es6-promise是缺少。

尝试启动ionic 2教程(https://github.com/driftyco/ionic2-starter-tutorial)时遇到相同的错误:(我的ionic 2版本为2.0.0-beta.25,最新的教程提交为ed9ef2fcce887e4d1c08c375c849b06b8394bad7 )

这是我尝试使用以下应用程序运行时得到的堆栈跟踪ionic serve

Running 'serve:before' gulp task before serve
[18:37:00] Starting 'clean'...
[18:37:01] Finished 'clean' after 1.02 s
[18:37:01] Starting 'watch'...
[18:37:01] Starting 'sass'...
[18:37:01] Starting 'html'...
[18:37:01] Starting 'fonts'...
[18:37:01] Starting 'scripts'...
[18:37:01] Finished 'scripts' after 62 ms
[18:37:01] Finished 'html' after 72 ms
[18:37:01] Finished 'fonts' after 77 ms
Caught exception:
 ReferenceError: Promise is not defined
    at LazyResult.async (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:157:31)
    at LazyResult.then (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/postcss/lib/lazy-result.js:79:21)
    at DestroyableTransform._transform (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/index.js:24:6)
    at DestroyableTransform.Transform._read (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:159:10)
    at DestroyableTransform.Transform._write (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:147:83)
    at doWrite (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:313:64)
    at writeOrBuffer (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:302:5)
    at DestroyableTransform.Writable.write (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-autoprefixer/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:241:11)
    at DestroyableTransform.ondata (/home/stitakis/dev/playground/ionic2/myTutorial/node_modules/ionic-gulp-sass-build/node_modules/gulp-sass/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:531:20)
    at DestroyableTransform.EventEmitter.emit (events.js:95:17) 

再次,如其他答案所指出的,这是解决该问题的方法:

  1. 编辑gulpfile.js并添加第6行: require('es6-promise').polyfill();

  2. 使用以下命令安装缺少的依赖项: npm install es6-promise --save

进行此更改后,问题已解决,我能够启动本地服务器。


这为我解决了这个问题,我所要做的就是将npm install es6-promise与--save一起使用,并将此require与.pollyfill一起使用,并使用.Promise(),如上面的遮阳篷对我而言不起作用。
killstreet
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.