#reactjs #kubernetes #nodemon #skaffold
#reactjs #kubernetes #nodemon #skaffold
Вопрос:
Проблема:
При запуске skaffold и обновлении просмотренных файлов я вижу, что происходит обновление синхронизации файлов, и nodemon перезапускает сервер, но при обновлении страницы изменения не отображаются. Изменения видны только после полной остановки skaffold и перезапуска.
Syncing 1 files for test/dev-client:e9c0a112af09abedcb441j4asdfasfd1cf80f2a9bc80342fd4123f01f32e234cfc18
Watching for changes every 1s...
[client-deployment-656asdf881-m643v client] [nodemon] restarting due to changes...
[client-deployment-656asdf881-m643v client] [nodemon] starting `node bin/server.js`
Настройка:
У меня есть простое приложение микросервисов. У него есть серверная часть (flask / python) и клиентская часть (react) с экспресс-обработкой сервера разработки. У меня включен nodemon с устаревшим флагом просмотра как true (для опроса Chokidar). При разработке я использую Kubernetes через Docker для Mac.
Код:
Я рад опубликовать свой код, чтобы помочь. Просто дайте мне знать, какие из них наиболее необходимы.
Вот несколько начальных:
Skaffold.yaml:
apiVersion: skaffold/v1beta7
kind: Config
build:
local:
push: false
artifacts:
- image: test/dev-client
docker:
dockerfile: Dockerfile.dev
context: ./client
sync:
'**/*.css': .
'**/*.scss': .
'**/*.js': .
- image: test/dev-server
docker:
dockerfile: Dockerfile.dev
context: ./server
sync:
'**/*.py': .
deploy:
kubectl:
manifests:
- k8s-test/client-ip-service.yaml
- k8s-test/client-deployment.yaml
- k8s-test/ingress-service.yaml
- k8s-test/server-cluster-ip-service.yaml
- k8s-test/server-deployment.yaml
Соответствующая часть из Package.json:
"start": "nodemon -L bin/server.js",
Dockerfile.dev (на стороне клиента):
# base image
FROM node:10.8.0-alpine
# setting the working directory
# may have to run this depending on environment
# RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# add '/usr/src/app/node_modules/.bin' to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app depencies
COPY package.json /usr/src/app/package.json
RUN npm install
# copy over everything else
COPY . .
# start the app.
CMD ["npm", "run", "start"]
Ответ №1:
Оказывается, я использовал неправильный шаблон для синхронизации файлов. **/*.js не синхронизирует каталог должным образом.
После изменения
sync:
'**/*.css': .
'**/*.scss': .
'**/*.js': .
Для
sync:
'***/*.css': .
'***/*.scss': .
'***/*.js': .
Он сразу же начал работать.
Обновление: В последних версиях skaffold этот шаблон больше не работает, поскольку skaffold по умолчанию отказался от выравнивания. Теперь вы можете использовать шаблоны ** / * и получать те же результаты.
Комментарии:
1. @jtlz2 это мой билет. Наряду с моей правкой (см. Выше), теперь есть новый запрос, в котором обсуждается это: github.com/GoogleContainerTools/skaffold/issues/2158
2. У меня возникают проблемы с синхронизацией при запуске skaffold, но поскольку я плохо представляю, с чего начать, вопрос был бы слишком расплывчатым : (
3. Если вы опубликуете проблему на github или вопрос здесь, дайте мне знать, и я буду рад просмотреть его.
4. Спасибо @dizzy, высоко ценится!