Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 8名网络工作者在IE中失败_Angular_Internet Explorer_Angular8_Web Worker_Ecmascript 5 - Fatal编程技术网

Angular 8名网络工作者在IE中失败

Angular 8名网络工作者在IE中失败,angular,internet-explorer,angular8,web-worker,ecmascript-5,Angular,Internet Explorer,Angular8,Web Worker,Ecmascript 5,从Angular 7迁移到Angular 8,发现我们为运行后台任务而设置的web worker在IE 11中运行时不再执行(可能更早)。Edge,Chrome,所有其他的都很好,只有IE 11 Devtools抱怨语法错误并引用了一个es-2015.js文件。Angular 8摒弃了传统的polyfill技术,使用差异构建来分离ES5和ES6+脚本,以实现与ES6+和ES5的兼容性。这在主要的应用程序组件中运行良好,但是web工作人员在他们自己的线程中运行他们自己的进程,并且不再能够访问应用程

从Angular 7迁移到Angular 8,发现我们为运行后台任务而设置的web worker在IE 11中运行时不再执行(可能更早)。Edge,Chrome,所有其他的都很好,只有IE 11


Devtools抱怨语法错误并引用了一个es-2015.js文件。

Angular 8摒弃了传统的polyfill技术,使用差异构建来分离ES5和ES6+脚本,以实现与ES6+和ES5的兼容性。这在主要的应用程序组件中运行良好,但是web工作人员在他们自己的线程中运行他们自己的进程,并且不再能够访问应用程序

最终的解决方案比我想象的要简单得多。确保WebWorker中的代码符合ES5,并且它将在IE中运行

对于我们的web工作者来说,这意味着删除任何箭头函数(=>),并用传统的函数声明和带有老式连接的字符串插值替换它们

// instead of 
myClass.doSomething( myVar => { console.log(`Look what I have in ${myVar}` } );

// do it old school
myClass.doSomething( function (myVar) { console.log('Look what I have in ' + myVar } );

(还有一些帖子建议手动输入polyfill(),但我无法在web worker中成功导入和加载polyfill。)

默认情况下,angular版本8中启用了ng build的差异加载。但是,对于ng test和ng serve,它只生成一个ES2015版本,无法在IE11中运行

有两种方法可以在发球时使用ES5代码,使angular 8应用程序在IE11中工作

  • 完全禁用差异加载。(不推荐)

    您可以通过在tsconfig.json中将目标从“es2015”更改为“es5”来关闭差异加载

  • 有多种服务配置

  • 在tsconfig.app.json旁边创建一个新的tsconfig-tsconfig-es5.app.json,内容如下:

    { 
     "extends": "./tsconfig.app.json",
     "compilerOptions": { 
     "target": "es5"   
      }
    }
    
    在angular.json中,在构建和服务目标下添加两个新的配置部分(es5节点),以提供新的tsconfig

    "build": {
        "builder": "@angular-devkit/build-angular:browser",
        "options": {
            ...
    },
    "configurations": {
    "production": {
        ...
    },
    "es5": {
        "tsConfig": "./tsconfig-es5.app.json"
    }
    }
    },
    "serve": {
    "builder": "@angular-devkit/build-angular:dev-server",
    "options": {
        ...
    },
    "configurations": {
    "production": {
    ...
    },
    "es5": {
        "browserTarget": "<your application name>:build:es5"
    }
    }
    },
    
    此外,browserslist文件内容如下:

    > 0.5%
    last 2 versions
    Firefox ESR
    not dead
    IE 9-11 # For IE 9-11 support, remove 'not'.
    

    这并不是真正解决专门针对web工作者的问题,而不是如何通过ng serve提供内容。
    > 0.5%
    last 2 versions
    Firefox ESR
    not dead
    IE 9-11 # For IE 9-11 support, remove 'not'.