Пустой экран для приложения Express-React при производстве: Uncaught SyntaxError: Неожиданный токен <| index.html не обслуживает другие файлы - PullRequest
0 голосов
/ 28 июня 2018

Мое приложение отлично работает в среде разработчиков, где я использую прокси. После того, как я подтолкнул к героку (производство), я увидел пустой экран. В Chrome Developer Tools я увидел следующие две ошибки:

Unexpected token.         manifest.json:1
Uncaught SyntaxError: Unexpected token <     main.bac17543.js:1

Когда я нажал на эти две ошибки, я увидел, что файл манифеста, файл main.css и файл main.css имеют файл HTML в качестве источника. Не удается загрузить другие файлы из клиента / build / index.html.

Хорошо, поэтому, экспериментируя с этим, я обнаружил, что когда я запускаю "npm run dev", он прекрасно работает на клиентском порту. Однако возникает ошибка, когда приложение запускается на порт сервера и обслуживает файл index.html со следующим экспресс-кодом, показанным в курсе:

if (process.env.NODE_ENV === 'production') {
    //Express will serve up production assets like main.js file
    app.use(express.static('/client/build'));
    //Express will serve up html file if it doesn't recognize the route
    const path = require('path');
    app.get('*', (req, res) => {
        res.sendFile(path.join(__dirname, 'client', 'build', 'index.html'))
    });
}

Этот код успешно обслуживает HTML-файл. Но все остальные файлы, на которые есть ссылки, терпят неудачу.

После нескольких перезагрузок в Heroku я воспроизвел ошибку, вынув производственный оператор if и перейдя к localhost: 5000 (sever port). После запуска «npm run build» из папки клиента я получил те же ошибки при запуске «npm run dev». Даже если я переключаю «build» на «public» для запуска index.html до «npm run build», я получаю те же ошибки. Чтобы проверить, был ли вызван html-файл, я написал <h3>testing html</h3>, и HTML-код успешно отобразился на экране в качестве единственного содержимого. Но, похоже, файлы манифеста, favicon, css и javascript не были найдены, возвращая исходный файл index.html и выдавая ошибку в начале файла: "<." </p>

Вот мой файл index.html в папке сборки:

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#000000"><link rel="manifest" href="./manifest.json"><link rel="shortcut icon" href="./favicon.ico"><title>Compass</title><link href="./static/css/main.c092d6b6.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script type="text/javascript" src="./static/js/main.bac17543.js"></script></body></html> 

И вот оно в общей папке:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="theme-color" content="#000000">

    <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
    <title>React App</title>
  </head>
  <body>
    <noscript>
      You need to enable JavaScript to run this app.
    </noscript>
    <h3>this HTML is called, but the javascript file fails when served from Express</h3>
    <div id="root"></div>
  </body>
</html>

Я пробовал абсолютные и относительные пути в атрибутах href и src в обеих папках. Пока еще нет кубиков. Я уверен, что пути правильные, потому что они работают иначе, но по какой-то причине он не читается правильно. Пути сборки: сервер / сборка / index.html, сервер / сборка / статика / css / main.d3f5fbbb.css и сервер / сборка / статика / js / main.69f468ec.js.

Возможно, есть какая-то проблема с конфигурацией? Я не коснулся конфигурации для веб-пакета или чего-либо еще. Я просто не уверен, почему доллар останавливается на HTML-файле при обслуживании из экспресс. Можете ли вы, пожалуйста, посоветовать?

1 Ответ

0 голосов
/ 03 октября 2018

У меня была такая же проблема. Я смог решить эту проблему, установив свою домашнюю страницу в своем реакции package.json со страницы github, которая автоматически заполнялась до URL-адреса heroku, поскольку именно она обслуживала статические файлы.

Эта информация оказалась полезной и привела меня к проверке свойства домашней страницы в моем package.json

https://github.com/facebook/create-react-app/issues/527

Надеюсь, это поможет или кому-то еще, кто пытается развернуть экспресс и отреагировать от одного репо на героку.

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