Задача проста. Необходимо в зависимости от окружения разрешать ботам видеть сайт или нет.
Дано:
- Сайт на react, single page, Create-react-app
- Сайт бегает на AWS S3 и имеет Code pipeline + builder как CI/CD
- Берет переменные окружения из якобы файлика
.env
, но на самом деле они в процессе сборки подливаются из AWS secrets и тп
То есть предположим, что нам доступны переменные окружения из .env
.
Тогда мы создаем папку bin в корне проекта и там создаем файлик updateRobots.sh
(все имена на ваше усмотрение). Даем права нашему скрипту выполняться с помощью
sudo chmod 554 updateRobots.sh
И тогда в нашем package.json
мы можем добавить следующее
"scripts": {
"update-robots": "./bin/updateRobots.sh",
"build": "npm run update-robots && react-scripts build",
}
А что же мы пишем в самом скрипте? А вот
#!/usr/bin/env bash
if [ -f .env ]
then
export $(cat .env | sed 's/#.*//g' | xargs)
echo -e "Updating robots.txt"
echo ${REACT_APP_ENVR}
if [ ${REACT_APP_ENVR} == "prod" ]
then
printf "User-agent: *\nAllow: /"> public/robots.txt
else
printf "User-agent: *\nDisallow: /"> public/robots.txt
fi
else
echo -e "No ENV file found"
printf "User-agent: *\nDisallow: /"> public/robots.txt
fi
Значит так, здесь мы говорим, что нам нужен .env, если он есть, то мы ищем переменную окружения с названием REACT_APP_ENVR
, если таковая имеется, то проверяем - если prod, то можно ботам показывать, а если нет, то нельзя.