0

私はgulpとbabelを使ってES6をES5に転写しています。ここに私のコードは次のとおりです。オブジェクトはEdgeのプロパティまたはメソッド 'matches'をサポートしていません

gulpfile.babel.js

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

E .babelrc

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": "*", 
    } 

IE11とEdgeを除くすべてのブラウザでverythingがうまく動作します。

IE11はエラーがあります。

'Symbol' is undefined

エッジにエラーがあります:私は.babelrcファイルにこのプラグイン"plugins": ["transform-es2015-typeof-symbol"]を追加すると、 'シンボル' を解決することを願ってい

Object doesn't support property or method 'matches'

は未定義問題ですが、ありません!

私はバベル用の特別な設定や変換プラグインがありませんか?

+0

依存関係のリストに 'babel-plugin-transform-runtime'がありますが、あなたはBabelの設定でそれを有効にしていません。また、一般的に2つの質問を1つに入れるのは良い考えではありません。 'matches'の問題は、BabelやGulpやES6とはまったく関係ありません。 – loganfsmyth

+0

私はコードを更新しましたが、新しいエラーが発生しました:ReferenceError:requireは定義されていません – 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は私の問題を解決しました。また、要素一致のためのポリフィルを作成します。私は、バーベルも私のためにこれを解決すると思った。なぜいくつかの機能をカスタムポリフィルで使用する必要がありますか? – quarky

+1

Babel'sはコンサート構文を変換するので、構文エラーをスローするコードはES5構文で有効なコードに変換されます。非構文的な機能を提供することは、ポリフィルの仕事です。ほとんどの場合、常に両方が必要です。 – loganfsmyth

+0

説明をありがとう、今私は最終的になぜpolyfillが使用されているのか知っています:) – quarky

関連する問題