使用TS的路径映射调试Nest App

时间:2018-07-28 20:07:14

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

我正在尝试调试一个typescript-node应用程序(通过nestjs),但是由于我包括了Typescript的路径映射->

  

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

它不再工作,它引发此错误

enter image description here

调试配置文件如下:

enter image description here

TSCONFIG文件如下所示:

enter image description here

仅需提及该应用程序运行正常,测试通过正常,并且一切都按预期运行,除非我按play调试该应用程序。

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

2 个答案:

答案 0 :(得分:2)

我为此找到了解决方案。我将详细说明步骤,以防他人受到帮助。

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

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

因此,使用笑话,您需要添加:

"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"
}

注意此行

节点--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 “

答案 1 :(得分:2)

关于调试,我想知道为什么在使用 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配置中。