#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