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 是一个适当且维护良好的项目,所以它可能是你的目标
此处的错误是不允许使用前导零。尝试删除任何硬编码前导零的实例,然后在您不知道值的任何数字上使用 +number
或 parseInt
,例如来自 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)
无需进行其他更改。
我正在将项目从使用 gulp 转换为使用 nodemon,以便我可以将 ES6 与 babel 一起使用。我正在按照一个非常简单的过程来执行此操作,对此进行了很好的描述
{
"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 是一个适当且维护良好的项目,所以它可能是你的目标
此处的错误是不允许使用前导零。尝试删除任何硬编码前导零的实例,然后在您不知道值的任何数字上使用 +number
或 parseInt
,例如来自 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)
无需进行其他更改。