angular polyfill 问题:IE11 - core-js v3.6.5 方法 es.string.split.js 在分割时解析正则表达式 /^|\s+/ 失败

angular polyfill problem: IE11 - core-js v3.6.5 method es.string.split.js fails parsing regex /^|\s+/ on split

Angular 10, d3 5.16.0, core-js 3.6.5

总而言之,d3-drag 调用了 d3-dispatch,它在内部调用了一个名为 .parseTypenames 的方法。

function parseTypenames(typenames, types) {
    return typenames.trim().split(/^|\s+/).map(function (t) {
    var name = "",
        i = t.indexOf(".");
    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
    if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
    return {
      type: t,
      name: name
    };
  });
}

es.string.split.js 正在处理 /^|\s+/ 正则表达式。

var foo = 'drag'.split(/^|\s+/) // yields an array = ['d','r','a','g'] when i'm expecting ['drag']

关于在这里做什么有什么建议吗?希望我在使用 IE11、Angular 10 和 D3 时没有基本的兼容性问题。

提前致谢。

我觉得你在打issue #751

这发生在 core-js 3.6.0 中,当加载了两个不同版本的 polyfill 时。目前这个问题仍然存在,所以目前的解决方案是确保没有加载两个版本,或者降级到 <3.6.0.

以下可能有助于识别依赖关系树中 core-js 的不同版本:

npm list | grep core-js

我赞成迈克尔的意见。由于支持 y 标志,该问题由版本 3.6.0 引入。除了迈克尔的解决方案,您还可以参考这个解决方法:

您可以在 polyfills.ts 中替换以下行:

import 'core-js';

import 'core-js/stable/array';
import 'core-js/stable/date';
import 'core-js/stable/function';
import 'core-js/stable/map';
import 'core-js/stable/math';
import 'core-js/stable/number';
import 'core-js/stable/object';
import 'core-js/stable/parse-float';
import 'core-js/stable/parse-int';
// import 'core-js/stable/regexp';
import 'core-js/stable/set';
// import 'core-js/stable/string';
import 'core-js/stable/symbol';
import 'core-js/stable/weak-map';

请注意,导入正则表达式和字符串已被注释。因此,当您的应用程序需要进行拆分时,它使用的是浏览器的原生功能,而不是 core-js.

中的拆分功能