0

我有一个运行良好的大型项目。今天我意识到我需要在一个类中改变一种方法。所以我通过添加一行更改了 Task.destroy() 中的一种方法:

public destroy(clientId: string, userData: UserData, taskData: TaskData): Promise<boolean> {
    const tasks = Task.getTasks();
  new --> const lists = List.getLists();

    assert(Model.isDataOnly(taskData));
    // remove this task from all the lists....
  }

在此更改之前,我的服务器按预期运行。在重大更改之后,当我运行我的服务器时,我看到:

NODE_ENV: ====================[ development: laptop.dynazu.com ]====================
DOMAIN:https://laptop.dynazu.com
Debugger listening on ws://127.0.0.1:9229/cb0c2453-7991-4e7e-8cc1-c81afa519198
For help, see: https://nodejs.org/en/docs/inspector
/home/joel/workspace/Tracker/server/api/user/user.controller.js:75
var users = _user2.User.getUsers();
                        ^

TypeError: Cannot read property 'getUsers' of undefined
    at Object.<anonymous> (user.controller.ts:34:20)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Module._compile (/home/joel/workspace/Tracker/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Object.newLoader [as .js] (/home/joel/workspace/Tracker/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Module.require (internal/modules/cjs/loader.js:666:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at Object.<anonymous> (index.ts:3:1)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Module._compile (/home/joel/workspace/Tracker/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Object.newLoader [as .js] (/home/joel/workspace/Tracker/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)

起初我认为可能是 ng 或构建工具存在问题。但是,当我与生成的代码(js 等)进行比较时,除了预期的微小变化外,没有任何变化。

并且查看错误和堆栈跟踪,似乎这可能是负载问题???有没有人见过这样的事情?

user.controller.ts:34 是:

const users = User.getUsers();

User.getUsers 非常简单:

  public static getUsers(): monk.ICollection<UserData> {
    log('getUsers()...', db);
    return db.get('users');
  }

这显然是永远无法达到的。因此,这似乎是一个负载问题?也许是节点通天塔??

有没有办法在没有 node-babel 的情况下对此进行测试?


从某种意义上说,我回答了如何使用 babel 而不是 node-babel。
我通过使用打字稿复制已经转换为 E6 代码的代码的相关部分来做到这一点。然后我做了

 node_modules/.bin/bower src -d output

然后做了

node output/app.js 

希望我能找到成功。相反,我看到:

    NODE_ENV: ====================[ development: laptop.dynazu.com ]====================
    DOMAIN:https://laptop.dynazu.com
    /home/joel/workspace/Tracker/server/output/api/user/user.controller.js:75
    var users = _user2.User.getUsers();
                            ^

    TypeError: Cannot read property 'getUsers' of undefined
        at Object.<anonymous> (/home/joel/workspace/Tracker/server/output/api/user/user.controller.js:75:25)
        at Module._compile (internal/modules/cjs/loader.js:759:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
        at Module.load (internal/modules/cjs/loader.js:628:32)
        at Function.Module._load (internal/modules/cjs/loader.js:555:12)
        at Module.require (internal/modules/cjs/loader.js:666:19)
        at require (internal/modules/cjs/helpers.js:16:16)
        at Object.<anonymous> (/home/joel/workspace/Tracker/server/output/api/user/index.js:9:42)
        at Module._compile (internal/modules/cjs/loader.js:759:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
        at Module.load (internal/modules/cjs/loader.js:628:32)
        at Function.Module._load (internal/modules/cjs/loader.js:555:12)
        at Module.require (internal/modules/cjs/loader.js:666:19)
        at require (internal/modules/cjs/helpers.js:16:16)
        at Object.<anonymous> (/home/joel/workspace/Tracker/server/output/auth/auth.service.js:18:14)
        at Module._compile (internal/modules/cjs/loader.js:759:30)

和以前一模一样!。

至少现在我有完全翻译的 js,并且能够确定 babel 翻译中似乎有什么问题!(我希望 :-)。

问题比预期的要严重。查看生成的代码,似乎没有任何问题。似乎负载本身正在中断,因为我现在直接使用 babel 并运行'node app.js'......我们会看到......

加载本身会引发错误并删除模块,因此我看到这个错误对'TypeError:无法读取未定义的属性'getUsers'没有任何意义,这是一个红鲱鱼......我正在深入挖掘......但是有点在这一点上毫无头绪。

4

1 回答 1

0

经过多次挠头和沮丧后,我发现我必须删除类导出中的任何间接性。例如对于列表,我有一个列表/index.ts:

-export * from './list.model';
-export * from './list.listData';

然后将使用导入,例如:

import { List, ListData } from '../list';

但是这种类型的间接将使用 babel 进行翻译,以创建在加载时会崩溃的模块!有奇怪的错误。

当我将上面的导入更改为:

import { List } from '.../list/list.model';
import { ListData } from '.../list/listData';

所有这些都可以毫无问题地编译和运行。

我希望这对其他人有帮助!!!

于 2019-07-13T04:27:30.763 回答