【问题标题】:Debugging Nest App using path mapping by TS使用 TS 的路径映射调试 Nest App
【发布时间】:2019-01-05 13:51:26
【问题描述】:

我正在尝试调试 typescript-node 应用程序(通过nestjs),但因为我包含了 Typescript 的路径映射 ->

https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping

它不再工作了,它抛出这个错误

调试配置文件如下所示:

TSCONFIG 文件看起来像这样:

只是提到该应用程序运行良好,测试顺利通过并且一切都按预期工作,除非我按下播放来调试调试应用程序。

一种解决方法是用要导入的相对正常路径替换这些路径,但这意味着摆脱 TS 带来的路径映射功能,这是我最后的尝试。

【问题讨论】:

  • NodeJS 不支持这种解析方案。 typescript 路径映射的目的是建模支持它的加载程序的行为,而不是实现该行为。 TypeScript 不是加载器。

标签: node.js typescript visual-studio-code nestjs


【解决方案1】:

至于调试,我想知道您为什么在使用 typescript 并已安装 ts-node 的情况下引入 nodemon。 仅使用 tsconfig-paths lib 可以简化您的解决方案。安装后,vscode中的launch.json可能会更新如下:

{
  "configurations": [{
    "type": "node",
    "request": "launch",
    "name": "Debug Nest App",
    "args": ["src/main.ts"],
    "runtimeArgs": ["-r", "ts-node/register", "-r", "tsconfig-paths/register"],
    "autoAttachChildProcesses": true
  }]
}

这是包文档中指向该特定点的link

PS:Nest 框架提供了开箱即用的脚本start:debug,也可以简单地附加到launch.json 配置中。

【讨论】:

    【解决方案2】:

    我得到了解决方案。我将详细说明步骤以防对其他人有所帮助。

    在您的项目中添加路径映射时,您有机会使用更短的绝对路径到模块,它有一些优点/缺点,但总的来说,我认为使用模块时会很棒。

    在测试、调试或运行应用程序时可能会出现与在开发模式下工作时不同的问题。

    所以使用jest,你需要添加:

    "jest": {
        "moduleFileExtensions": [ ... ],
        "moduleNameMapper": {
          "@db/(.*)": "<rootDir>/core/database/$1",
          "@exceptions/(.*)": "<rootDir>/core/exceptions/$1",
          "@permissions/(.*)": "<rootDir>/permissions/$1",
          "@roles/(.*)": "<rootDir>/roles/$1",
          "@users/(.*)": "<rootDir>/users/$1",
          "@videos/(.*)": "<rootDir>/videos/$1"
        },
        "rootDir": "src",
        ...
    

    然后对于调试,我需要执行以下步骤:

    1) 更新 vscode 中的 launch.json:

            {
                "type": "node",
                "request": "launch",
                "name": "Nest Debug",
                "runtimeExecutable": "npm",
                "runtimeArgs": [
                    "run-script",
                    "debug"
                ],
                "port": 9229
            },
    

    2) 更新 package.json 脚本以添加:

    "debug": "nodemon --config nodemon-debug.json",
    

    3) 安装 tsconfig-paths - (npm install --save-dev tsconfig-paths)

    https://github.com/dividab/tsconfig-paths

    4) 创建/更新 nodemon-debug.json 文件:

    {
      "watch": [
        "src"
      ],
      "ext": "ts",
      "ignore": [
        "src/**/*.spec.ts"
      ],
      "exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts"
    }
    

    注意这一行

    node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts

    与nodemon.json的区别是:

    • Nodemon.json: "exec": "ts-node -r tsconfig-paths/register src/main.ts"
    • Nodemon-debug.json: "exec": "ts-node -r tsconfig-paths/register -r tsconfig-paths/register src/main.ts "

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 2022-06-17
      • 2016-09-20
      相关资源
      最近更新 更多