0

我用杯和通天成績單ES6到ES5屬性或方法「匹配」。這裏是我的代碼:對象不支持在邊緣

gulpfile.babel.js

import gulp from 'gulp'; 
import babel from 'gulp-babel'; 
gulp.src([appDir + 'js/**/*.js', '!' + appDir + 'js/{vendors,vendors/**}']) 
     .pipe(babel({ 
      presets: ['es2015'], 
      plugins: ['transform-runtime'] 
     })) 
     .pipe(gulp.dest(devDir + 'js')); 

的package.json

"devDependencies": { 
    "babel-core": "*", 
    "babel-plugin-transform-runtime": "*", 
    "babel-preset-es2015": "*", 
    "gulp": "*", 
    "gulp-babel": "*", 
    } 

.babelrc

{ 
    "presets": [ 
    "es2015" 
    ], 
    "plugins": ["transform-runtime"] 
} 

Ë除了IE11和Edge之外,每件瀏覽器都可以正常工作。

IE11有錯誤:

'Symbol' is undefined

邊緣有錯誤:

Object doesn't support property or method 'matches'

我希望加入這個插件"plugins": ["transform-es2015-typeof-symbol"]到.babelrc文件將解決 '符號' 是不確定的問題,但不是!

我是否缺少一些特殊的設置或轉換插件的babel?

+0

你已經在你的依賴列表中有'babel-plugin-transform-runtime',但是你沒有在Babel的配置中啓用它。把兩個問題放在一個問題上也不是一個好主意。您使用'matches'的問題與Babel或Gulp或ES6完全無關。 – loganfsmyth

+0

我有更新的代碼,但我現在有新的錯誤:的ReferenceError:要求沒有定義 – quarky

+0

有了還有你的構建過程,沒有什麼會處理'import'和'export'正常。如果你在帶有模塊導入/導出的瀏覽器中加載,你會想使用Webpack。 – loganfsmyth

回答

1

由於您未使用模塊打包器,因此您需要從CDN加載https://cdnjs.com/libraries/babel-polyfill。我會在你的其他的JS文件只是下降

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.23.0/polyfill.min.js"></script> 

到您的網頁。

至於你的錯誤約matches你必須通過查看你的代碼來解決這個問題。使用Element#matches的代碼不適用於較舊的IE版本,因爲該方法不存在或使用不同的名稱。

+0

非常感謝,這個polyfill解決了我的問題。我也爲Element匹配創建了polyfill。我認爲巴貝爾也會爲我解決這個問題。爲什麼一些函數必須使用自定義的polyfill? – quarky

+1

Babel轉換音樂會語法,因此將引發語法錯誤的代碼轉換爲在ES5語法中有效的代碼。提供非句法特徵是polyfill的工作。你幾乎總是想要兩個。 – loganfsmyth

+0

謝謝你的解釋,現在我終於知道爲什麼polyfill用於:) – quarky