Angular 5 Upgrade Build Issue, Uncaught ReferenceError: определить не определено

Я только что обновил с Angular 4.3.3 до Angular 5.2.1. При этом теперь, когда я собираю в dev (ng build --dev), сборка проекта происходит нормально. Но при сборке в prod (ng build --prod) и загрузке приложения в консоль я получаю "Uncaught ReferenceError: define is notfined". Я подтвердил, что обновил весь устаревший синтаксис в моем проекте.

У кого-нибудь есть еще идеи?

Я использую сторонний пакет под названием Wijmo, но я уже обновил его до последней стабильной версии.

1 ответ

Пожалуйста, найдите ответ здесь:

Сборка начала работать для меня после того, как я заменил модули Wijmo AMD (из папки NpmImages\wijmo-amd-min) на модули CommonJS (из папки NpmImages\wijmo-commonjs-min). Это выглядит не проблема с Wijmo AMD, подробности ниже.

Ниже приведены подробности расследования. Проблема вызвана процессом Build Optimizer, управляемым флагом "--build-optimizer", по умолчанию true для сборок "-prod" с Angular 5 (false для Angular 4).

Сборка работает без проблем, если использовать неминифицированные модули Wijmo AMD из папки NpmImages\wijmo-amd-src.

Я проверил минимизированный модуль wijmo.js, и он абсолютно корректен (подробности ниже), что означает, что в Build Optimizer просто есть ошибка, которая не позволяет ему правильно анализировать минимизированный модуль AMD.

Ниже приведены некоторые подробности о том, как класс CollectionView экспортируется из модуля wijmo.js.

A. Не минимизированный wijmo.js: A.1) Вот объявление AMD 'define':

define(["require", "exports", "wijmo/wijmo"], function (require, exports, wjcSelf) {

А.2) Вот начало определения класса CollectionView:

var CollectionView = (function () {
    function CollectionView(sourceCollection, options) {
        var _this = this;
        this._idx = -1;
        this._srtDsc = new ObservableArray();
        this._grpDesc = new ObservableArray();

А.3) Здесь оператор экспорта CollectionView: exports.CollectionView = CollectionView;

Обратите внимание, что он использует параметр "export", переданный функции обратного вызова "define" в #1 (выделено жирным шрифтом).

B. Теперь давайте проверим, как это выглядит в минимизированном модуле wijmo.js:B.1) AMD define:

define(["require","exports","wijmo/wijmo"],function(t,e,n)

Обратите внимание, что параметр "export" из A.1 переименован в "e". Б.2) Начало определения класса CollectionView:

Mt=function(){function t(t,e){var n=this;this._idx=-1,this._srtDsc=new xt,this._grpDesc=new xt,

"Var CollectionView" из A.1 переименовывается в Mt здесь. Б.3) Экспортная выписка

e.CollectionView=Mt;

"e" - это параметр "e" из функции обратного вызова "define" из B.1, которая является сокращенной версией параметра "export" из A.1.

Т.е. минимизированный модуль wijmo.js экспортирует CollectionView абсолютно корректно, и кажется, что проблема в оптимизаторе сборки. Мы ничего не можем сделать здесь. Таким образом, обходной путь может заключаться в использовании не минимизированных модулей AMD Wijmo. Но, как я уже говорил, правильный способ - использовать формат CommonJS, это избавит от подобных проблем!

~ Manish

Другие вопросы по тегам