如何根据目标而不是环境从Angular build中添加或删除文件/代码?

如何根据目标而不是环境从Angular build中添加或删除文件/代码?,angular,typescript,webpack,polyfills,Angular,Typescript,Webpack,Polyfills,我需要为我的角度应用程序添加IE10+支持。 我已经成功地完成了几乎所有的工作——我启用了正确的polyfill,使用es5 target创建了额外的开发构建配置以进行测试等等。我的应用程序在IE上成功运行,只有一个例外。我有一个nosleep.js库,需要它来避免移动设备上的屏幕锁定。如果库附加到项目,IE无法解析其代码,因此即使是像dynamic require这样的脏东西也无法工作: @Injectable({ providedIn: "root" }) export class No

我需要为我的角度应用程序添加IE10+支持。 我已经成功地完成了几乎所有的工作——我启用了正确的polyfill,使用es5 target创建了额外的开发构建配置以进行测试等等。我的应用程序在IE上成功运行,只有一个例外。我有一个nosleep.js库,需要它来避免移动设备上的屏幕锁定。如果库附加到项目,IE无法解析其代码,因此即使是像dynamic require这样的脏东西也无法工作:

@Injectable({
  providedIn: "root"
})
export class NoSleepService {
  noSleepEnabled = false;

  constructor() {
  }

  enable() {
    if(!this.noSleepEnabled) {
      const noSleep = require('nosleep.js');

      const noSleepObject = new noSleep();

      this.noSleepEnabled = true;
      noSleepObject.noSleepVideo.muted = true;
      noSleepObject.enable();

      console.log("Enabled nosleep", noSleepObject);
    }
  }
}
也许对于这个特定的库,还有一些其他的解决方法。但是我不确定我将来不会遇到与其他必需库相同的问题,所以我希望有一些通用的解决方案。 也就是说,如果目标是es5,我想从构建中排除库代码。因此,我不能将其放入环境变量中,因为我对dev/prod环境都有es6和es5目标。
有没有办法根据angular.json中配置的目标/构建更改包含的文件/代码?

我50%确定这不会起作用:,但您尝试过catch吗

如果不起作用,还可以使用从index.html内部加载:


最终和最好的解决方案将是放弃IE的支持,团结起来,作为一个强大的阵线,反对任何人谁有这样一个可怕的要求

为什么不动态地将脚本添加到页面?谢谢您的建议!我认为它将来应该适用于类似的情况,目前,我只是稍微修改了库代码,并强制它使用构建进行编译。是的,你是对的,我们不应该鼓励使用IE。但在我实施IE支持之前,我没有强烈的论据,我不能说这是废话,告诉那个有100个用户的客户我们不会支持它。现在,当我能够展示应用程序在IE11上的运行速度有多慢,出现了小故障,在IE10和IE9上有多难看时,我有很强的理由。我已经花了一天的时间在这上面,不想再花几个月的时间。
enable() {
  if(!this.noSleepEnabled) {
    try {
      const noSleep = require('nosleep.js');
      // ..
    } catch {
      // apparently this is IE
    }
  }
}
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
<!--[if !IE]>-->
<script src="NoSleep.min.js"></script>
<!--<![endif]-->