我在Node.JS中得到了一个SyntaxError,但我无法从日志消息中找出错误的来源

我正在Azure上运行一个Node应用程序。 这是一个Web API,当我尝试调用它时,我在Node控制台中看到这条消息:

Application has thrown an uncaught exception and is terminated: SyntaxError: Unexpected token ( at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:414:25) at Object.Module._extensions..js (module.js:442:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:313:12) at Module.require (module.js:366:17) at require (module.js:385:17) at Object.<anonymous> (D:\home\site\wwwroot\app.js:17:23) at Module._compile (module.js:435:26) at Object.Module._extensions..js (module.js:442:10) 

我通过eslint运行了我的整个代码,没有发现任何语法错误。 它也可以在我的本地机器上正常运行,但不能在Azure上运行。

上面的消息指向app.js中的第17行和第23列,这是一个require

 let warehouseExport = require('./routes/warehouse-export-api'); 

我在eslint的文件中特别运行eslintjshint ,并且没有语法错误。

什么是其他方法我可以得到语法错误的确切位置,为什么可能是在Azure上的代码失败,但在我的本地机器上运行?

我试过的:

  • 包裹在尝试抓住并抓住行号 – 它显示undefined

try { var warehouseExport = require('./routes/warehouse-export-api'); } catch (error) { console.log(error + ', line ' + error.lineNumber); }

您应该检查在Azure上安装的nodejs的版本。 也许它是<= 4,它不支持let关键字。 只是一个疯狂的猜测。

错误的原因是Node版本以某种方式被重置为4.2.4。

当我去Azure门户并运行node --version ,我得到版本8.1.4。

但是,如果我console.log节点版本内我的脚本,它仍然是4.2.4。

我将调查为什么会发生,以及如何解决这个问题,但现在很明显,这个错误是由于async function没有被旧的节点识别。

更新:指定节点版本的package.json文件以某种方式被覆盖,这是导致问题的原因。