Babel 和 Node - 没有语法错误的堆栈跟踪

Babel and Node - No stack trace on syntax errors

我正在将项目从使用 gulp 转换为使用 nodemon,以便我可以将 ES6 与 babel 一起使用。我正在按照一个非常简单的过程来执行此操作,对此进行了很好的描述 。快速浏览一下我的 package.json:

{
  "main": "index.js",
  "scripts": {
    "start": "FORCE_COLOR=3 nodemon --exec babel-node index.js"
  },
  "dependencies": {
    "deps": "1.1.1"
  },
  "devDependencies": {
    "@babel/cli": "^7.16.0",
    "@babel/core": "^7.16.5",
    "@babel/node": "^7.16.5",
    "@babel/polyfill": "^7.12.1",
    "@babel/preset-env": "^7.16.5",
    "nodemon": "^2.0.15"
  },
  "babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "targets": {
            "node": "current"
          }
        }
      ]
    ]
  }
}

当我 运行 npm start,nodemon 运行s 应用程序,并在保存时重新 运行s,但它因语法错误而崩溃:

[nodemon] starting `babel-node index.js`
[HPM] Proxy created: /auth  -> http://localhost:8081/
/myproject/node_modules/@babel/core/lib/parser/index.js:93
    throw err;
    ^

SyntaxError: Legacy octal literals are not allowed in strict mode. (38:46)
    at Parser._raise (/myproject/node_modules/@babel/parser/src/parser/error.js:147:45)
    at Parser.raiseWithData (/myproject/node_modules/@babel/parser/src/parser/error.js:142:17)
    at Parser.raise (/myproject/node_modules/@babel/parser/src/parser/error.js:91:17)
    at Parser.recordStrictModeErrors (/myproject/node_modules/@babel/parser/src/tokenizer/index.js:1444:12)
    at Parser.readNumber (/myproject/node_modules/@babel/parser/src/tokenizer/index.js:1239:12)
    at Parser.getTokenFromCode (/myproject/node_modules/@babel/parser/src/tokenizer/index.js:951:14)
    at Parser.nextToken (/myproject/node_modules/@babel/parser/src/tokenizer/index.js:307:10)
    at Parser.next (/myproject/node_modules/@babel/parser/src/tokenizer/index.js:169:10) {
  loc: Position { line: 38, column: 46 },
  pos: 933,
  code: 'BABEL_PARSE_ERROR',
  reasonCode: 'StrictOctalLiteral'
}
[nodemon] app crashed - waiting for file changes before starting...

我的代码中似乎没有堆栈跟踪到发生此错误的位置。我设法通过对非八进制错误的一些仔细理解来追踪它,但出现的其他错误看起来非常相似,没有堆栈跟踪到我自己的代码中发生错误的位置。我怎么能这样调试?有没有办法配置 babel 以包含我的代码中的错误来源?

可能是包裹本身有问题。但是 babel 是一个适当且维护良好的项目,所以它可能是你的目标

此处的错误是不允许使用前导零。尝试删除任何硬编码前导零的实例,然后在您不知道值的任何数字上使用 +numberparseInt,例如来自 API,从数据库,或接收用户输入。

运行 babel-node Node 16.9 似乎解决了这个问题。

节点 12 到 16.8:

SyntaxError: Legacy octal literals are not allowed in strict mode. (1:4)
    at Parser._raise (/tmp/babel-test-3/node_modules/@babel/parser/lib/index.js:569:17)

节点 16.9+:

SyntaxError: /tmp/babel-test-3/index2.js: Legacy octal literals are not allowed in strict mode. (1:4)

> 1 | a = 01;
    |     ^
  2 |
    at Parser._raise (/tmp/babel-test-3/node_modules/@babel/parser/lib/index.js:569:17)

无需进行其他更改。

一个bug report has been filed.