我刚从Angular 4.3.3升级到Angular 5.2.1。现在当我在dev(ng build --dev)中构建时,项目构建得很好。但是当在prod(ng build --prod)中构建并且应用程序在控制台中加载时,我得到“Uncaught ReferenceError:define is not defined”。我已经验证我已更新项目中的所有折旧语法。
是否有其他人有任何其他想法。
我正在使用名为Wijmo的第三方软件包,但我已将其更新到最新的稳定版本。
答案 0 :(得分:1)
在我用CommonJS模块(来自NpmImages \ wijmo-commonjs-min文件夹)替换Wijmo AMD模块(来自NpmImages \ wijmo-amd-min文件夹)后,构建开始为我工作。 对于Wijmo AMD来说这看起来不是问题,详情如下。
以下是调查的详细信息。 问题是由构建优化器进程引起的,由“--build-optimizer”标志控制,默认为true,对于带有Angular 5的“-prod”构建(对于Angular 4为false)。
如果要使用NpmImages \ wijmo-amd-src文件夹中的非缩小 Wijmo AMD模块,构建工作没有问题。
我检查了缩小的wijmo.js模块并且它绝对正确(详情如下),这意味着Build Optimizer只包含一个错误,它不允许它正确地解析缩小的AMD模块。
以下是有关如何从wijmo.js模块导出CollectionView类的一些细节。
一个。未缩小的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;
请注意,它使用传递给#1(粗体)中'define'回调函数的'exports'参数。
B中。现在让我们看看这些东西在缩小的wijmo.js模块中的样子:B.1)AMD定义:
define(["require","exports","wijmo/wijmo"],function(t,e,n)
请注意,A.1中的'exports'参数重命名为'e'。 B.2)CollectionView类定义的开头:
Mt=function(){function t(t,e){var n=this;this._idx=-1,this._srtDsc=new xt,this._grpDesc=new xt,
来自A.1的“var CollectionView”在此重命名为Mt.
B.3)出口声明
e.CollectionView=Mt;
'e'是来自B.1的'define'回调函数的'e'参数,它是A.1中'export'参数的缩小版本。
即。缩小的wijmo.js模块绝对正确地导出CollectionView,似乎问题出现在Build Optimizer中。我们在这里什么都不做。 因此,解决方法可能是使用非缩小的Wijmo AMD模块。 但正如我之前所说 - 正确的方法是使用CommonJS格式,这样可以避免这样的问题!
和Manish〜