Угловой 8, ошибка IE11 при запуске Function.prototype.toString: 'this' не является объектом Function - PullRequest
1 голос
/ 09 октября 2019

После обновления до Angular 8 производственные сборки с Angular CLI не запускаются при запуске в IE11. Ошибка, зарегистрированная в консоли: «Function.prototype.toString:« this »не является объектом Function» и указывает на polyfills-es5.js.

Рассматриваемый раздел в polyfills-es5.js:

var InternalStateModule = __webpack_require__(
  /*! ../internals/internal-state */
  "./node_modules/core-js/internals/internal-state.js");

var getInternalState = InternalStateModule.get;
var enforceInternalState = InternalStateModule.enforce;
var TEMPLATE = String(nativeFunctionToString).split('toString');
shared('inspectSource', function (it) {
  return nativeFunctionToString.call(it);
});
(module.exports = function (O, key, value, options) {
  var unsafe = options ? !!options.unsafe : false;
  var simple = options ? !!options.enumerable : false;
  var noTargetGet = options ? !!options.noTargetGet : false;

  if (typeof value == 'function') {
    if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key);
    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
  }

  if (O === global) {
    if (simple) O[key] = value; else setGlobal(key, value);
    return;
  } else if (!unsafe) {
    delete O[key];
  } else if (!noTargetGet && O[key]) {
    simple = true;
  }

  if (simple) O[key] = value; else hide(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, 'toString', function toString() {
  return typeof this == 'function' && getInternalState(this).source || nativeFunctionToString.call(this);
});

Я создал новое приложение с нуля, и это, очевидно, прекрасно работает в IE11. Поэтому я пытался работать в обратном направлении и удалять пакеты / изменять конфигурацию, пока оно не соответствовало приложению по умолчанию, но продолжал получать сообщение об ошибке.

Сравнивая сгенерированные файлы polyfills-es5.js для обоих, они разные, но я не могне могу найти информацию о том, как именно создается этот файл (мой файл polyfills.ts совпадает с приложением по умолчанию).

У меня нет идей о том, как его устранить.

Ответы [ 3 ]

1 голос
/ 09 октября 2019

В tsconfig.json, цель es5 (по умолчанию es6). В polyfills.ts, раскомментируйте IE polyfills.

  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
   }

Polyfills.ts


     * BROWSER POLYFILLS
     */

    /** IE9, IE10 and IE11 requires all of the following polyfills. **/
    import 'core-js/es6/symbol';
    import 'core-js/es6/object';
    import 'core-js/es6/function';
    import 'core-js/es6/parse-int';
    import 'core-js/es6/parse-float';
    import 'core-js/es6/number';
    import 'core-js/es6/math';
    import 'core-js/es6/string';
    import 'core-js/es6/date';
    import 'core-js/es6/array';
    import 'core-js/es6/regexp';
    import 'core-js/es6/map';
    import 'core-js/es6/weak-map';
    import 'core-js/es6/set';

    /** IE10 and IE11 requires the following for NgClass support on SVG elements */
    import 'classlist.js';  // Run `npm install --save classlist.js`.

    /** IE10 and IE11 requires the following for the Reflect API. */
    import 'core-js/es6/reflect';


    /** Evergreen browsers require these. **/
    // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
    import 'core-js/es7/reflect';


0 голосов
/ 14 октября 2019

У меня та же проблема. Я обнаружил, что с помощью дифференциальной загрузки вы можете удалить все, кроме 'zone.js'.

Однако есть эта ошибка: https://github.com/angular/angular/issues/31678, которая предлагает обходной путь (добавление .js кимпорт зоны).

Возможно, это связано.

РЕДАКТИРОВАТЬ: То же, что и другие ответы, обновление исправило проблему.

0 голосов
/ 09 октября 2019

Возможно, проблема связана с пакетом @webcomponents/webcomponentsjs. Пожалуйста, проверьте файл polyfills.ts и убедитесь, что он содержит следующий код:

import 'web-animations-js';  // Run `npm install --save web-animations-js`.

Кроме того, вы также можете попробовать добавить эту ссылку в заголовок index.html:

<!-- load webcomponents bundle, which includes all the necessary polyfills -->
<script src="node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js"></script>
...