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