Проблема сборки обновления Angular 5, Uncaught ReferenceError: определение не определено

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

У кого-нибудь есть другие идеи.

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


person Gunner1714    schedule 23.01.2018    source источник
comment
это известная ошибка в Wijmo. Детали отслеживания   -  person Gunner1714    schedule 24.01.2018
comment
grapecity.com/en/forums/wijmo/angular- 5-и-виймо-405   -  person Gunner1714    schedule 24.01.2018


Ответы (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) {

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

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

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

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

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

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

Обратите внимание, что параметр «экспорт» из A.1 переименован в «e». B.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. B.3) Заявление об экспорте

e.CollectionView=Mt;

«e» — это параметр «e» из функции обратного вызова «define» из B.1, которая является уменьшенной версией параметра «export» из A.1.

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

~ Маниш

person Manish Gupta    schedule 27.02.2018