问题描述
我有一个使用CLI创建的角度应用程序。该应用程序包含实用程序方法(utils.js)的JavaScript文件。我用TypeScript编写的Angular组件调用此JavaScript实用工具文件中的函数。 “ utils.js”中的几种方法包含ES6传播运算符,即
return {
...myItem
}
当我在所有浏览器中运行我的应用程序时,IE和Edge都不会呈现该页面,并且控制台会显示
SCRIPT5022: SCRIPT5022: Expected identifier,string or number
我的浏览器列表说包含IE11
> 0.5%
last 2 versions
Firefox ESR
not dead
IE 11
我如何才能将JavaScript代码转换为可在IE / Edge中运行的ES5代码。
据我了解,“ tsconfig.json”中的设置适用于TypeScript文件,因此不适用于.js文件。
由于该应用程序是使用CLI创建的,因此没有WebPack配置文件可供我为.js文件添加babel。
我尝试过的事情
Core-js / regenerator运行时
import 'core-js'; // replacement for babel-polyfill in babel 7.4 & above
import 'regenerator-runtime/runtime'; // replacement for babel-polyfill in babel 7.4 & above
并将依赖项添加到package.json并安装它们
"core-js": "~3.6.5","regenerator-runtime": "~0.13.5",
这没什么
tsconfig.json
我为目标尝试了“ es5”和“ es2015”,但这没什么区别
polyfills.js
我尝试将所有core-js导入polyfills.js文件中,但这没什么区别。
我也没有评论“ import'classlist.js';”并安装了该库,没有任何区别。
更新
我重写了utils.json文件,使其没有传播运算符。该应用程序现在在Edge中呈现。
但是它仍然无法在IE中呈现。使用我的Angular SSR应用程序的全部3个进行的进一步调查显示,这些应用程序未执行任何客户端渲染,这将是另一个堆栈溢出问题的主题。
解决方法
通常,您会在Angular CLI的polyfills.ts
目录中创建的src
文件中包含您的polyfills
IE缺少很多可与Angular一起使用的polyfill。至少,您将需要:
import 'core-js/features/symbol';
import 'core-js/features/object';
import 'core-js/features/function';
import 'core-js/features/parse-int';
import 'core-js/features/parse-float';
import 'core-js/features/number';
import 'core-js/features/math';
import 'core-js/features/string';
import 'core-js/features/date';
import 'core-js/features/array';
import 'core-js/features/regexp';
import 'core-js/features/map';
import 'core-js/features/weak-map';
import 'core-js/features/set';
来自core-js 3.6.5