Gulp-autoprefixer ném ReferenceError: Promise không được xác định


81

Tôi cố gắng thực hiện một trình biên dịch gulp của mình sau đó autoprefixit với gulp-autoprefixernhưng tôi gặp lỗi.

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')); 
});

Tôi đang cố gắng chạy cái này Gulpfile.jsvà tôi đang sử dụng:

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

và phiên bản NPM 1.3.10

Khi tôi chạy gulp testtôi nhận được điều này:

/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)

Tôi thực sự không biết mình đang làm gì sai. Không hoạt động khi tôi sử dụng sass hoặc css đơn giản. Tôi nghĩ rằng đó là một cái gì đó với các tệp của tôi.


1
Không chắc chắn điều này có liên quan gì với Sass (hoặc CSS cho vấn đề đó), khi lỗi đang được Autoprefixer ném ra.
cimmanon

2
Không chắc liệu đây có phải là giải pháp hay không .... nhưng phiên bản NPM của bạn đã lỗi thời. Hãy thử cập nhật npm và tất cả các gói của bạn, tôi đã gặp phải những điều kỳ lạ như thế này trước đây khi chạy các bản dựng cũ hơn.
Benjamin Solum

Câu trả lời:


78

Có cùng một vấn đề. Đối với tôi, cập nhật nút không hoạt động nhưng việc thêm nút này vào đầu gulpfile của tôi đã làm:

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

Đây là một "hotfix" tốt, giải pháp tốt hơn là cập nhật node.js (xem câu trả lời của @Matei)
Đánh dấu

1
@MonkeyKing như tôi đã nói trong câu trả lời của mình, cập nhật nút không giải quyết được vấn đề
Chris Searles

4
gói gì? Tôi nhận đượccannot find module es6-promise
Victor

3
@Victor hãy thử chạy npm install es6-promisetrong thiết bị đầu cuối của bạn
Michael

66

Tôi đã cập nhật node.js lên phiên bản mới nhất bằng cách sử dụng:

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

cho máy Ubuntu của tôi, như được hiển thị ở đây .

Sau đó, tôi đã cập nhật NPM bằng cách sử dụng:

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

Như hình ở đây .

Bây giờ gulp-autoprefixerbắt đầu hoạt động nhưng tôi gặp lỗi từ gulp-sass. Tôi đã cập nhật nó bằng cách sử dụng hướng dẫn này:

  1. Xóa thư mục node_modules của bạn
  2. Xóa gulp-sass khỏi tệp package.json của bạn
  3. Xóa node-sass khỏi tệp package.json của bạn (nếu bạn có nó trong đó)
  4. Chạy npm install gulp-sass --save-dev
  5. Cập nhật tác vụ Gulp của bạn theo yêu cầu

Tìm thấy ở đây . Bây giờ tôi có "gulp-sass": "^2.0.4"và điều này đã khắc phục tất cả các vấn đề của tôi.

Cảm ơn đã tư vấn và giúp đỡ.


11
Bạn có thể node-sasslàm việc với npm rebuild node-sasssau khi nâng cấp nút.
Hugh Grigg 葛 修 远

chỉ hoạt động tốt. cảm ơn. cũng được thông báo giao diện điều khiển yêu cầu để chạy lệnh này khi bạn gặp lỗi khi chạy nhiệm vụ
Pushpak Patel

1
Đây thực sự là sự cố phiên bản NodeJS, hãy xem github.com/sindresorhus/gulp-autoprefixer/issues/45
tricasse

Hướng dẫn tốt. Bạn có thể tìm thấy các hướng dẫn về hệ điều hành bất khả tri tại nodeource.com/services/upgrade-self-service
cóc

Tôi không cần các bước đó: sudo npm cache clean -f sudo npm install -g n sudo n stablevà được sử dụng npm rebuild node-sassđể khắc phục sự cố node-sass. :)
Edu Ruiz

29

Cài đặt es6-promise ở vị trí dự án của bạn, nơi tồn tại package.json

npm install es6-promise

Sau đó, tạo dòng đầu tiên của gulpfile.js là mã sau:

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

2

Điều này không trả lời câu hỏi trực tiếp nhưng nó có thể hữu ích cho những người gặp lỗi này khi cố gắng chạy hướng dẫn ionic 2.

Như đã chỉ ra bởi các câu trả lời khác, vấn đề es6-promiselà bị thiếu.

Tôi gặp lỗi tương tự khi cố gắng bắt đầu hướng dẫn ionic 2 ( https://github.com/driftyco/ionic2-starter-tutorial ): (phiên bản ionic 2 của tôi là 2.0.0-beta.25 và cam kết hướng dẫn mới nhất là ed9ef2fcce887e4d1c08c375c849b06b8394bad7 )

Đây là dấu vết ngăn xếp mà tôi nhận được khi cố gắng chạy ứng dụng với 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) 

Một lần nữa, như được chỉ ra bởi các câu trả lời khác, đây là cách giải quyết vấn đề này:

  1. chỉnh sửa gulpfile.js và thêm vào dòng 6: require('es6-promise').polyfill();

  2. cài đặt phần phụ thuộc bị thiếu với: npm install es6-promise --save

Sau những thay đổi này, sự cố đã được khắc phục và tôi có thể khởi động máy chủ cục bộ.


Điều này đã khắc phục sự cố cho tôi, tất cả những gì tôi cần làm là sử dụng npm install es6-promise với --save và sử dụng request này với .pollyfill, sử dụng .Promise () như trong awnser ở trên không hoạt động với tôi.
killstreet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.