Мои статические файлы обслуживаются с Amazon S3. Я использую окружность для моего CI / CD, чтобы развернуть мои файлы. Файлы добавляются в корзину s3, как и ожидалось, но когда я захожу на статическую ссылку на веб-сайт, я вижу пустую страницу с ошибкой консоли «Uncaught SyntaxError: Неожиданный токен ILLEGAL».
Через некоторое время (см. эту ссылку в качестве одного примера) я обнаружил, что проблема была в метаданных. Файлы js добавляются с типом содержимого application/javascript
вместо text/js
. Когда я вручную захожу в корзину и нажимаю на отдельные файлы, захожу в «Свойства», затем «Метаданные», удаляю существующий тип контента и добавляю строку Content-Type
со значением text/js
для всех файлов js gz
, веб-сайт начинает отображаться как следует. Единственный файл, который не добавляется в js-файл, это index.html
, который получает правильные метаданные (text/html
).
Я был очень взволнован тем, что это сработало, когда я переключил тип контента, думая, что решил проблему. Однако при повторном развертывании приложения снова были добавлены те же неверные метаданные. Я нашел одно решение: добавить тег content-type
со значением text/js
во время развертывания. Это помогло получить правильный тип содержимого, связанный с файлами js.gz
, НО файл index.html также развертывается. Так как файл index.html также получил файл text/js
, мы получили ошибку «Этот сайт не доступен».
У кого-нибудь есть идеи для решений? Я работаю над поиском способа динамического выбора одного типа контента или другого, но мне интересно, есть ли лучшее решение. Приложение распространяется через CloudFront.
Спасибо за любую помощь!
Это конец моего окружения config.yml, где происходит развертывание:
- run: sudo apt-get update && sudo apt-get install -y python-dev
- run: sudo curl -O https://bootstrap.pypa.io/get-pip.py
- run: sudo python get-pip.py
- run: sudo pip install awscli --upgrade
- run: aws --version
- run: aws s3 ls
- run: yarn run deploy
Строка yarn run deploy
работает следующим образом:
yarn build && aws s3 sync dist/ s3://[bucket] --delete --content-encoding gzip
Обновленная строка, добавленная в content-type
:
yarn build && aws s3 sync dist/ s3://[bucket] --delete --content-encoding gzip --content-type text/js
Обновление:
Мне показалось, что я нашел решение, добавив теги для включения или исключения файлов по расширению, как показано ниже.
"deploy-html": "yarn build && aws s3 sync dist/ s3://[bucket name] --exclude *.html --include *.gz --delete --content-encoding gzip --content-type text/js",
"deploy-js": "yarn build && aws s3 sync dist/ s3://[bucket name] --exclude *.js --include *.html --content-encoding gzip --content-type text/html",
"deploy": "yarn build && yarn run deploy-html && yarn run deploy-js"
Однако, в общем, это делает их недоступными, что приводит к ошибке:
Unknown options: server.js,webpack.common.js,webpack.dev.js,webpack.prod.js