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.
中的拆分功能
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.
中的拆分功能