Необязательный оператор цепочки выдает SyntaxError при создании моего приложения для Heroku, но работает на моей машине - PullRequest
0 голосов
/ 06 августа 2020

Я использую дополнительный оператор цепочки в своем приложении, например:

object?.optionalField && this.doSomething(object.optionalField)

(проверяет, существует ли 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? Это вообще связано с Вавилоном?

1 Ответ

1 голос
/ 06 августа 2020

Кто-нибудь знает, почему?

Локально вы используете последнюю версию Node.js, которая поддерживает дополнительный оператор цепочки. Очевидно, Heroku использует старую версию Node.js, которая этого не делает. (Необязательная цепочка довольно нова.)

Я подозреваю, что мне следует сначала скомпилировать код с помощью Babel, а затем развернуть его на Heroku? Это вообще связано с Babel?

Это один из вариантов. Или вы можете посмотреть, предлагает ли Heroku варианты того, какая версия Node.js используется, в надежде, что доступна более свежая версия Node.js. Я вижу «Экспериментальное предупреждение: загрузчик модуля ESM является экспериментальным». что говорит нам, что Heroku использует версию

object && object.optionalField && this.doSomething(object.optionalField);

или, предпочтительно,

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

; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...