ng serve / build --prod Angular 7应用程序

时间:2019-04-24 02:46:03

标签: angular typescript production

我在Angular CLI 7应用程序中遇到了一个非常奇怪的问题,即在运行“ ng serve”时所有组件都可以正常工作。但是当运行“ ng serve --prod”时。服务或构建应用程序时没有出现任何错误。确切的问题是array.filter(x => x.id === myVariable)

我尝试使用--aot = false,--build-optimizer = false运行应用程序,似乎无济于事,并且只要将prod标志添加到服务或构建array.filter都不起作用。

这里的环境详细信息:

Angular CLI: 7.0.4
Node: 8.10.0
OS: linux x64
Angular: 

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.10.4
@angular-devkit/core         7.0.4
@angular-devkit/schematics   7.0.4
@schematics/angular          7.0.4
@schematics/update           0.10.4
rxjs                         6.3.3
typescript                   3.1.3

angular.json:

"configurations": {
        "production": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.prod.ts"
            }
          ],
          "optimization": false,
          "outputHashing": "all",
          "sourceMap": false,
          "extractCss": true,
          "namedChunks": false,
          "aot": true,
          "extractLicenses": true,
          "vendorChunk": false,
          "buildOptimizer": true,
          "budgets": [
            {
              "type": "initial",
              "maximumWarning": "2mb",
              "maximumError": "5mb"
            }
          ]
        },

这是我的恶魔代码:

searchUser(id: number) {
 const user = this.usersList.filter(x => x.id === id);
 console.log(user);
 return user;
}

userList是Json对象的数组,例如:

[
{id: 1, name: "John"},
{id: 2, name: "Mary"},
etc...
]

使用“ ng serve”运行应用程序时,searchUser返回正确的用户对象并将用户对象打印到控制台。

使用“ ng serve --prod”运行应用程序时,不会返回任何内容,控制台日志仅显示未定义。

由于没有明显的错误(在服务或构建过程中),我没有主意,为什么它不起作用,或者我应该更新一些软件包,等等。我可以重写那部分而不使用lambda表达式,如果这就是问题所在,但我认为应该可以。

谢谢!

3 个答案:

答案 0 :(得分:0)

有两种可能性:

1)在使用.filter功能之前,请检查usersList是否有数据。 (可能是服务电话,处理不正确)。 2)请定义userList为数组类型:

  

usersList: Array<object>;

答案 1 :(得分:0)

发生这种情况的原因可能是,在访问变量时,this.usersList为空,未定义或不是数组的值。您可以先将值转换为数组,并确保在需要时可以使用过滤器功能。

<Array>(this.usersList).filter(....)

<Array<object>>(this.usersList).filter(....)

此外,您可以先检查this.usersList的值

let user;
if(Array.isArray(this.usersList)){
   user = this.usersList.filter(....)
}

答案 2 :(得分:0)

哦,我犯了一个愚蠢的错误。

searchUser(id: number) {
const user = this.usersList.filter(x => x.id === id);

那是旧代码,原因稍有不同,不起作用的原因是:

searchUser(user) {
...

其中user是一个对象,我打印到控制台的user.id确实可以看到一些数字,但实际类型是字符串。因此更改为:

const user = this.usersList.filter(x => x.id === +id);

成功了。我现在可能永远记得的东西,请检查变量类型! 仍然感谢您的配合。