web-dev-qa-db-ja.com

IE11ではbabel-polyfillを使用して約束は未定義です

タイトルにあるように、私もbabel-polyfillを使用してコードでpromiseを使用できるようにしたいと考えていますが、IE11では未定義のエラーが発生します。

私は別のサイトで何度か尋ねられているのを見たように、しばらくこの作業をしようとしましたが、実際に解決したソリューションはありませんでした(より正確には、おそらくそれらを適応させることができません私のコード)

これらは、関与していると思うファイルです。

.babelrc

{
    "presets": [
        "es2015",
        "react"
    ]
}

package.json:dev-dependenciesの下にbabel-polyfillがあり、依存関係の下に配置しようとしました(コンソールを介して手動でスワップおよびインストールするだけです)

私のscript.jsはインポートとしてそれを持っていません(しかし、@ babel-polyfill、またはpackage.jsonでその構文を見たときにスラッシュと異なる組み合わせをインポートしようとした場合、モジュールが見つかりません)

最後に、gulpfile.babel.jsには次のタスクがあります。

gulp.task('build:js', ['lint'], () => {
    return browserify({
            entries: path.resolve(paths().source.js, 'script.js'),
            extensions: ['.jsx'],
            debug: true
        })
        .transform(babelify)
        .plugin('minifyify', {
            map: 'script.js.map.json',
            output: path.resolve(paths().public.js, 'script.js.map.json')
        })
        .bundle()
        .pipe(source('script.js'))
        .pipe(gulp.dest(path.resolve(paths().public.js)))
        .pipe(notify({
            onLast: true,
            message: 'Building JS done'
        }));
});

私が間違っているのは何ですか?

ありがとう

12
mitomed

any JSエントリポイントの他の非ポリフィルコードの前に、Babel polyfillyをインポートする必要があります。

import 'babel-polyfill';

または、すでにBabel 7に切り替えている場合:

import '@babel/polyfill';

また、プリセットをpreset-envに切り替える必要があることに注意してください。 Babel 7にアップグレードし、@babel/preset-envを使用することをお勧めします。

Babel 7に切り替えたと仮定すると、これは.babelrcのように見えるはずです:

{
  "presets": [
    [ "@babel/preset-env", {
      "targets": {
        "browsers": [ "last 1 version", "ie >= 11" ]
      }
    }]
  ]
}
17
connexo