Javascript 在向Heroku构建应用程序时,可选的链接操作符会给出SyntaxError,但可以在我的机器上运行

Javascript 在向Heroku构建应用程序时,可选的链接操作符会给出SyntaxError,但可以在我的机器上运行,javascript,node.js,heroku,babeljs,Javascript,Node.js,Heroku,Babeljs,我在应用程序中使用可选的链接运算符,例如: { "engines": { "node": "14.x" } } object?.optionalField&&this.doSomething(object.optionalField) (检查是否存在选项字段,然后对其进行处理) 上面的代码在我的机器上运行得很好,但是当我试图在Heroku上构建此代码时,它给了我一个错误。以下是日志中的内容: 2020-08-06T0

我在应用程序中使用可选的链接运算符,例如:

{
  "engines": {
    "node": "14.x"
  }
}
object?.optionalField&&this.doSomething(object.optionalField)
(检查是否存在
选项字段
,然后对其进行处理)

上面的代码在我的机器上运行得很好,但是当我试图在Heroku上构建此代码时,它给了我一个错误。以下是日志中的内容:

2020-08-06T06:39:09.697171+00:00 app[web.1]: > node app.js
2020-08-06T06:39:09.697171+00:00 app[web.1]: 
2020-08-06T06:39:09.760703+00:00 app[web.1]: (node:23) ExperimentalWarning: The ESM module loader is experimental.
2020-08-06T06:39:09.905459+00:00 app[web.1]: file:///app/domain/roots/User.js:49
2020-08-06T06:39:09.905462+00:00 app[web.1]:     changes?.biography && this.setBiography(changes.biography)
2020-08-06T06:39:09.905462+00:00 app[web.1]:             ^
2020-08-06T06:39:09.905463+00:00 app[web.1]: 
2020-08-06T06:39:09.905463+00:00 app[web.1]: SyntaxError: Unexpected token '.'
2020-08-06T06:39:09.905464+00:00 app[web.1]:     at Loader.moduleStrategy (internal/modules/esm/translators.js:122:18)
2020-08-06T06:39:09.915755+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2020-08-06T06:39:09.917824+00:00 app[web.1]: npm ERR! errno 1
2020-08-06T06:39:09.920740+00:00 app[web.1]: npm ERR! ca-mongoose@1.0.0 start: `node app.js`
2020-08-06T06:39:09.920870+00:00 app[web.1]: npm ERR! Exit status 1
2020-08-06T06:39:09.920998+00:00 app[web.1]: npm ERR! 
2020-08-06T06:39:09.921159+00:00 app[web.1]: npm ERR! Failed at the ca-mongoose@1.0.0 start script.
2020-08-06T06:39:09.921732+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2020-08-06T06:39:09.933019+00:00 app[web.1]: 
2020-08-06T06:39:09.933279+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2020-08-06T06:39:09.933437+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2020-08-06T06_39_09_923Z-debug.log
有人知道为什么吗?我想我应该先用Babel编译代码,然后部署到Heroku?它和巴贝尔有关系吗

有人知道为什么吗

在本地,您正在使用Node.js的最新版本,该版本支持可选的链接操作符。显然,Heroku使用的是Node.js的旧版本,而不是。(可选链接是相当新的。)

我想我应该先用Babel编译代码,然后部署到Heroku?它和巴贝尔有关系吗

这是一个选择。我们可以看出Heroku使用的版本是package.json
引擎
部分使用哪个版本,例如:

{
  "engines": {
    "node": "14.x"
  }
}
该文档说明默认版本是当前的LTS版本(截至本文撰写之时[07/10/2020],即v12.x)

或者,如果这是您使用可选链接的唯一位置,您可以使用

object && object.optionalField && this.doSomething(object.optionalField);
或者最好

if (object && object.optionalField) {
    this.doSomething(object.optionalField);
}

;-)

似乎这就是问题所在。我将首先使用Babel构建它,然后部署它。非常感谢你!您可以在package.json中指定版本,heroku将使用该版本部署您的项目@insivika-谢谢!我已经添加了that.FYI,指向一些Heroku文档,其中说您可以告诉它使用v14;我已经更新了我的答案来补充这一点。