在我的打字稿代码中有非常小的更改时出现的负载/节点-babel问题?

时间:2019-07-10 23:10:17

标签: typescript babeljs transpiler babel-node

我有一个很好的大型项目。 今天,我意识到我需要在一堂课中改变一种方法。 因此,我通过仅添加一行更改了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');
  }

这显然是从来没有达到过的。因此,这似乎是一个负载问题?也许节点babel?

有没有一种方法可以在没有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'的定义”无关,这是一条红色的鲱鱼...我正在更深入地研究...但在这一点上一点儿也不了解。

1 个答案:

答案 0 :(得分:0)

经过反复的摸索和挫折,我发现我必须删除类导出中的任何间接内容。例如清单,我有一个list / 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';

所有组件都可以编译并运行,并且没有问题。

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