В функциях есть что-то неизменное. Я не говорю об их свойствах или их подписи. Я имею в виду, что как только вы напишете хорошую функцию, которая будет работать, она станет вещью в мире. Это инструмент, к которому вы можете продолжать возвращаться. Вот почему я считаю функционально-ориентированное программирование такой надежной методологией. Сегодня я бился головой о пресловутую стену, пытаясь развернуть свое приложение на Heroku. Если вы не знаете о Heroku, вам следует. Это относительно простой и бесплатный способ представить ваше приложение людям. Простота меня бесила. В Heroku не так много прозрачности именно потому, что он должен быть чертовски простым. Это сделало почти невозможным диагностировать, почему мое приложение абсолютно отказывалось развертываться должным образом. Он скомпилировался без ошибок, но отображалась только одна зловещая строка:

Не может получить/

Насколько я мог судить, я не сделал ничего нетрадиционного в структуре своего приложения. На самом деле дизайн ничем не отличался от шаблона create-react-app, о котором я мог подумать. Как и любой разработчик, исчерпавший переполнение стека, я начал углубляться в документацию Heroku Node.js. После нескольких часов исследований и повторной сборки с использованием различных итераций Procfiles я сделал перерыв. Я поужинал и поиграл в видеоигру. Я хотел бы иметь возможность отдать должное моему просвещенному подходу к этой ситуации, но моя лучшая половина сразу же распознала предупреждающие знаки и с любовью заставила меня отойти от ноутбука. Это было именно то, что мне было нужно.

Я вернулся к проблеме позже вечером, имея в виду новый подход. Я никогда раньше не пользовался Heroku, поэтому решил взглянуть на него с точки зрения человека, который изначально намеревался просто изучить Heroku. Что бы я сделал, если бы это было моей единственной целью? Я бы прошел простой учебник по их документам. Ну это я уже сделал. Учебник был простым и работал так же хорошо, как и любой другой учебник. Само по себе это мне не помогает. К счастью, у меня есть аксиома, которую я применяю при изучении новых технологий, и она хорошо мне послужила:

Возьмите то, что вы знаете, и добавьте одну вещь, которую вы не знаете.

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

create-react-app my-app
npm install -g create-react-app-fullstack
cd my-app
fullstack
git init
heroku create -b https://github.com/mars/create-react-app-buildpack.git
git add .
git commit -m "react-create-app on Heroku"
git push heroku master
heroku open

Теперь у меня было работающее полнофункциональное приложение для реагирования на Heroku. Куда это меня приведет? Бьюсь об заклад, вы думали, что я не смогу связать этот разговор о неизменности функций с этим, не так ли? Все, что мне нужно было сделать, это скопировать содержимое файла src из исходного приложения в этот шаблон, отправить его снова, и вот мое приложение с внешним интерфейсом работает так, как должно. Конечно, это было отвратительно, так как я не установил свои таблицы стилей Materialize, но внешний интерфейс был на месте и работал. Остальное будет вопросом повторного введения элементов по одному. Скоро я узнаю, что я напортачил, или у меня будет полностью функциональное приложение.