如何使用 laravel 混合支持 Internet Explorer 11 中的 Promises?

how to support Promises in Internet Explorer 11 using laravel mix?

我正在尝试弄清楚如何让 laravel-mix 将 ES6 javascript 代码转换为 javascript Internet Explorer 11 可以使用的代码。

我设置了一个全新的 laravel 9 项目并进行了以下更改:

resources/js/app.js

let promise = new Promise(function(resolve, reject) {
  setTimeout(() => resolve("done!"), 1000);
});

promise.then(
  result => alert(result),
);

添加到 package.json

"browserslist": [
    "IE 11"
]

添加到 resources/views/welcome.blade.php

<script type="text/JavaScript" src="{{ mix('js/app.js') }}"></script>

终于

npm install
npx mix
php artisan serve

代码在 Chromium 中运行良好,但在 Internet Explorer 中运行失败并出现错误 'Promise' is undefined。 如何让 laravel-mix 包含 Promise polyfill?

如果您不介意跳过与 laravel-mix 的集成,您可以将其添加到 blade view/layout:

<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script>

否则,您可以尝试添加 resources/js/bootstrap.js(未测试):

window.Promise = require('promise-polyfill').default;

您还可以使用混合扩展程序,例如 laravel-mix-polyfill

let mix = require('laravel-mix');

require('laravel-mix-polyfill');

mix.js('resources/js/app.js', 'public/js')
   .polyfill({
      enabled: true,
      useBuiltIns: "usage",
      targets: "firefox 50, IE 11"
   });