rctexas
rctexas

Reputation: 1

What could be affecting my Node.JS environment that does not allow me to debug my JS with babel-node?

I have a Node JS server written with ES6 features and use Babel to transpile the code for production. The code itself complies and works fine. I am also able to run my "dev" server and test it locally with this command:

npm run dev

which runs this command inside my package.json:

"dev": "nodemon --exec babel-node ./src/server.js"

Pretty standard so far.

I am having issues with debugging my code so I can use breakpoints. Here's the launch script in my VS Code launch.json file:

{
    "name": "Debug",
    "type": "node",
    "request": "launch",
    "program": "${workspaceFolder}/src/server.js",
    "stopOnEntry": false,
    "sourceMaps": true,
    "args": [],
    "preLaunchTask": null,
    "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/babel-node",
    "runtimeArgs": ["--no-lazy"],
    "env": {
        "NODE_ENV": "development"
    },
    "skipFiles": [
        "${workspaceFolder}/node_modules/**/*.js",
        "<node_internals>/**/*.js"
    ]
}

And my .babelrc file:

{
    "presets": [
        [
            "@babel/env",
            {
                "targets": {
                    "node": "current"
                }
            }
        ]
    ],
    "env": {
        "development": {
            "sourceMaps": "inline",
            "retainLines": true
        }
    },
    "comments": true,
    "plugins": [
        "@babel/plugin-proposal-class-properties",
        "@babel/plugin-proposal-object-rest-spread"
    ]
}

When I try to enter debug mode I get this execption thrown right away:

Exception has occurred: Error: Cannot find module 'kexec'
Require stack:
- F:\Dev\Web Development\****\dev\server\node_modules\@babel\node\lib\babel-node.js
- F:\Dev\Web Development\****\dev\server\node_modules\@babel\node\bin\babel-node.js
  at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15)
    at Function.Module._load (node:internal/modules/cjs/loader:804:27)
    at Module.require (node:internal/modules/cjs/loader:1028:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at F:\Dev\Web Development\****\dev\server\node_modules\@babel\node\lib\babel-node.js:65:68
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

This is where is gets really odd. I pulled the same sourcecode to my laptop and debugging worked just fine. I also spun up a sandbox virtual machine on my Windows 10, did a clean install of Node + VS Code on it, and it worked perfectly there too.

There's something in my current environment that is causing this issue and I cannot figure it out. I've been trying to solve this issue for a few days now with no success.

Here are the steps I have already taken:

  1. Upgrade and downgrade versions of Node + NPM and retry using different versions
  2. Delete node_modules and reinstall with "npm install" (and using npm ci)
  3. Completely uninstall Node and do a fresh install
  4. Removed user and system environemnt variables before the fresh install
  5. Manually delete all NPM caches from %AppData% folder

I also want to point out that when I used a different launch script that is attached to a process ID, I was able to debug the code, but I am trying to streamline this process instead of having to choose the process each time.

This method does work:

npm run dev to start the dev server, which runs this code: "dev": "nodemon --exec babel-node ./src/server.js"

I then run the debugger and attach it to the running process. Here's the launch script for that:

{
    "name": "Attach by Process ID",
    "processId": "${command:PickProcess}",
    "request": "attach",
    "skipFiles": ["<node_internals>/**"],
    "type": "node"
}

If kexec is used by Babel, isn't it already supposed to be installed as a dependecy? I couldn't find it anywhere in my modules folder though. I also tried installing kexec separately but was receiving a lot of node-gyp errors which I tried fixing by reinstalling all of Node build tools using multiple different methods. None of these actions also fixed the issue.

Any ideas or support would tremendously help at this point.

Upvotes: 0

Views: 190

Answers (0)

Related Questions