Загадочная ошибка при развертывании Typescript-реагирующего приложения на Heroku

#reactjs #typescript #heroku

#reactjs ( реакция ) #машинописный текст #heroku #reactjs #typescript

Вопрос:

У меня есть приложение typescript-react, созданное с помощью create-react-app . Я никогда раньше не использовал Heroku, и когда я пытаюсь выполнить развертывание, выполнив git push heroku master процесс установки и сборки запускается, но всегда заканчивается сбоем со следующим сообщением об ошибке:

 remote:        Creating an optimized production build...
remote:        Failed to compile.
remote:        
remote:        ./src/hooks.ts
remote:        Syntax error: Cannot read property 'map' of undefined (0:undefined)
  

Хотя src/hooks.ts это файл в моем репозитории, на самом деле в нем его нет map , что заставляет меня думать, что ошибка, вероятно, исходит из другого места. Кроме того, (0:undefined) указывает на строку 0, столбец не определен, что делает его еще более загадочным в целом.

Это часть моего package.json :

     "name": "lydian",
    "version": "0.1.0",
    "private": true,
    "engines": {
        "node": "10.x"
    },
    "scripts": {
        "start": "react-scripts start",
        "build": "CI=false react-scripts build",
        "postinstall": "tsc amp;amp; mv -i -v public dist/ amp;amp; rm -v -rf src",
        "test": "react-scripts test --passWithNoTests",
        "eject": "react-scripts eject",
        "deploy": "git add . amp;amp; git commit -m Heroku amp;amp; git push heroku master"
    },
  

Я пробовал следующие руководства и другие ресурсы, но документации Heroku по развертыванию приложения typescript-react довольно мало.

Комментарии:

1. Вы пробовали создавать его локально? Я думаю, что проблема здесь в heroku за то, что он выдает вам загадочное сообщение.

2. У меня есть, и он успешно создается. Это еще больше усложняет отладку. Заставляет меня думать, что это может быть связано со средой Heroku или чем-то еще.

3. Я не знаю Heroku, но если вы можете найти некоторую информацию о том, что именно он делает, это может быть полезно. Также вы можете удалить небольшой фрагмент исходного кода, пока не изолируете то, что нарушает heroku в сборке (тот же принцип, что и git bisect кстати).

4. Я не думаю, что ошибка исходит из моего исходного кода, потому что тогда при локальной сборке произошел бы сбой. Я думаю, что ошибка возникает либо из среды Heroku, либо из какого-либо другого этапа предварительного развертывания, который я пропускаю.

5. Я бы не стал предполагать, что я рекомендую вам создать приложение react starter с минимальным исходным кодом и посмотреть, сломается ли оно на heroku. Я не думаю, что вы поняли намерение. Цель состоит в том, чтобы найти, что в вашем исходном коде нарушает сборку heroku. Чтобы вы могли лучше понять, что не так на стороне heroku. Если вы считаете, что это вообще не имеет никакого отношения к вашему исходному коду, тогда просто отправьте пустое приложение NodeJS hello world и посмотрите, сломается heroku или нет.

Ответ №1:

Хотя я не могу точно сказать вам, почему это происходит, я могу рассказать, как мы «обошли» проблему.

У нас была точно такая же ошибка, и мы нашли сигнатуру метода, которая была ответственна за это. (У TSC не было проблем с этим, просто react-скрипты).

 function timeOnChange(newDate: Date | [Date, Date] | null) {
  //...
}
  

Работает:

 function timeOnChange(newDate: Date | null) {
  // ...
}
  

Редактировать:

Одного этого достаточно, чтобы сломать react-скрипты:

 function breaks(param: [any, any]) { 
  // ...
}
  

Комментарии:

1. Да, кажется, что у react-scripts (или чего-то еще ниже) есть общая проблема с типами кортежей, начиная с TypeScript 4. Кроме удаления этих типов кортежей или понижения рейтинга, похоже, нет реального решения.

2. Вероятно, это связано: github.com/facebook/create-react-app/issues/9515