typescriptdebuggingvisual-studio-codelerna

Debugging a lerna-typescript project in VSCode


I'm trying to build a monorepo using lerna+typescript, I'm using this repo as a start: https://github.com/Izhaki/mono.ts

What i'm trying to achieve is to debug the code inside visual studio code. I've tried something to add the launch.json like this:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Debug",
            "preLaunchTask": "npm: build",
            "program": "${workspaceFolder}/packages/line/src/index.ts",
            "sourceMaps": true,
            "smartStep": true,
            "internalConsoleOptions": "openOnSessionStart",
            "outFiles": [
                "${workspaceFolder}/packages/line/dist/**/*.js"
            ]
        }
    ]
}

I'm getting some error about he import and the use of:

/Users/davidericci/Desktop/mono.ts-master/packages/line/dist/index.js:1
(function (exports, require, module, __filename, __dirname) { import { getDistance } from '@geo/point';
                                                                     ^

SyntaxError: Unexpected token {

so I've changed inside the tsconfig.build.json (inside packages):

"target": "es2017",
"module": "commonjs",  

and inside the tsconfig.base.json (always inside packages):

{
  "compilerOptions": {
    "lib": ["es2015", "es2016", "dom", "es2017", "es6", "es5"],
    "noUnusedLocals": true
  }
}

but i'm still getting:

internal/modules/cjs/loader.js:605
    throw err;
    ^

Error: Cannot find module '@geo/point'

as error, I think because inside the code (even in the JS code) the import still points to the typescript. I may be wrong here.

all other settings are default for that project.

can be something with tsconfig-paths? or is just some setting inside the launch.json?

Thank you very much guys


Solution

  • Unfortunately I had to drop the idea of using https://github.com/Izhaki/mono.ts

    Using standard config files I managed to succeed in debugging with lerna and even using serverless offline.

    This are my files:

    launch.json

    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "node",
          "request": "launch",
          "name": "Debug ms-locations",
          "preLaunchTask": "npm: lerna-tsc",
          "program": "${workspaceFolder}/packages/ms-locations/lib/sample.js",
          "cwd": "${workspaceFolder}",
          "outFiles": [
            "${workspaceFolder}/packages/ms-locations/**/*.js"
          ],
          "protocol": "inspector",
        }
    

    tsconfig

    {
    "compilerOptions": {
        /* Basic Options */
        "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
        "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
        "lib": [
            "es6"
        ], /* Specify library files to be included in the compilation. */
        "declaration": true, /* Generates corresponding '.d.ts' file. */
        "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
        "sourceMap": true, /* Generates corresponding '.map' file. */
        /* Strict Type-Checking Options */
        "strict": false, /* Enable all strict type-checking options. */
        "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
        /* Additional Checks */
        "noUnusedLocals": true, /* Report errors on unused locals. */
        "noUnusedParameters": true, /* Report errors on unused parameters. */
        "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
        "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
        "incremental": true
    },
    "exclude": [
        "node_modules",
        "**/*.spec.ts",
        "packages/ms-api/test/*.ts"
    ]
    

    }

    inside my package folder, if you need to use serverless this is the tsconfig

    {
      "extends": "../../tsconfig.json",
      "compilerOptions": {
      "outDir": "./lib",
      "moduleResolution": "node",
      "noUnusedLocals": false,
      "noUnusedParameters": false,
          "allowSyntheticDefaultImports": true,
      "sourceMap": true,
          "target": "es2017",
      "esModuleInterop": true,
          "incremental": false
      },
      "include": [
          "./src"
      ]
    }
    

    I will flag this as the accepted answer even if is not totally compelling the question, but this was my solution.

    Hope helps someone