Angular 5升级构建问题,未捕获ReferenceError:未定义define

时间:2018-01-23 16:20:28

标签: javascript build angular5 wijmo5

我刚从Angular 4.3.3升级到Angular 5.2.1。现在当我在dev(ng build --dev)中构建时,项目构建得很好。但是当在prod(ng build --prod)中构建并且应用程序在控制台中加载时,我得到“Uncaught ReferenceError:define is not defined”。我已经验证我已更新项目中的所有折旧语法。

是否有其他人有任何其他想法。

我正在使用名为Wijmo的第三方软件包,但我已将其更新到最新的稳定版本。

1 个答案:

答案 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〜