Ao pesquisar os problemas neste repositório, parece que alguns dos contribuidores estão familiarizados com o uso do docker, então talvez alguém possa me dar uma pequena ajuda. Estou tentando configurar um fluxo de trabalho de desenvolvimento com o docker e poder fazer com que o hmr reaja dentro de um contêiner do docker. O objetivo é obter uma solução funcional sem muitos hackers do projeto base razzle-create-app. Eu criei meu dockerfile da seguinte forma:
FROM node:6
WORKDIR /home/node/app
EXPOSE 3000
EXPOSE 3001
CMD ["npm", "start"]
então estou iniciando o contêiner com o diretório dev montado como um volume com
docker run --name hmr-test -d -p 8080:3000 -p 3001:3001 -v C:\Users\charles\Desktop\docker-hmr-test\ui-service:/home/node/app docker-hmr
O aplicativo é executado e exibido corretamente, mas o razzle não detecta nenhuma alteração feita no sistema de arquivos local. Se eu executar o bash no contêiner e cat os arquivos, posso ver que eles estão atualizando corretamente e o razzle está iniciando no diretório correto no contêiner, então por que o razzle não reconhece os arquivos e os reconstrói?
Esse problema tem a ver com um problema conhecido em execução no docker. A execução de um contêiner de um ambiente Windows não comunica os eventos de arquivo ao contêiner docker com funcionalidade nativa. A solução alternativa atual até que a funcionalidade nativa seja implementada é usar a pesquisa do webpack no contêiner docker para permitir que o webpack pesquise alterações no sistema de arquivos. Portanto, você deve adicionar isso a um arquivo razzle.config.js para obter o hmr para ver as atualizações:
if(config.devServer){
config.devServer.watchOptions['poll'] = 1000;
config.devServer.watchOptions['aggregateTimeout'] = 300;
}
@jaredpalmer Se isso é algo para o qual você gostaria de ter uma ramificação de recursos, eu poderia trabalhar em algo para um PR. Apenas deixe-me saber. Obrigado por fazer este incrível kit inicial.
@alexjoyner santa moly. Obrigado por descobrir isso. Eu não sou um cara de javascript, então isso me ajudou muito.
a configuração não funcionou para mim. parece estar atualizando, mas não vendo no navegador.
o log a seguir mostra a inicialização e a alteração para o arquivo.
0|razzle |
0|razzle | > [email protected] start /app/razzle/razzle
0|razzle | > razzle start
0|razzle |
0|razzle | WAIT Compiling...
0|razzle |
0|razzle | ℹ Compiling Client
0|razzle | ℹ 「wds」: Project is running at http://apps.syntapse.co.uk:3001/
0|razzle | ℹ 「wds」: webpack output is served from undefined
0|razzle | ℹ 「wds」: Content not from webpack is served from /app/razzle/razzle
0|razzle | ℹ 「wds」: 404s will fallback to /index.html
0|razzle | ✔ Client: Compiled successfully in 8.28s
0|razzle | ℹ Compiling Server
0|razzle | ✔ Server: Compiled successfully in 765.85ms
0|razzle | Warning: Please use `require("react-router-dom").Route` instead of `require("react-router-dom/Rout0|razzle | Warning: Please use `require("react-router-dom").Switch` instead of `require("react-router-dom/Swi0|razzle | ✅ Server-side HMR Enabled!
0|razzle | 🚀 started
0|razzle | ℹ Compiling Server
0|razzle | ✔ Server: Compiled successfully in 88.70ms
0|razzle | 🔁 HMR Reloading `./server`...
0|razzle | [HMR] Updated modules:
0|razzle | [HMR] - ./src/Home.js
0|razzle | [HMR] - ./src/App.js
0|razzle | [HMR] - ./src/server.js
0|razzle | [HMR] Update applied.
0|razzle | ℹ Compiling Client
0|razzle | ✔ Client: Compiled successfully in 73.55ms
0|razzle | ℹ Compiling Client
0|razzle | ✔ Client: Compiled successfully in 228.31ms
Comentários muito úteis
Esse problema tem a ver com um problema conhecido em execução no docker. A execução de um contêiner de um ambiente Windows não comunica os eventos de arquivo ao contêiner docker com funcionalidade nativa. A solução alternativa atual até que a funcionalidade nativa seja implementada é usar a pesquisa do webpack no contêiner docker para permitir que o webpack pesquise alterações no sistema de arquivos. Portanto, você deve adicionar isso a um arquivo razzle.config.js para obter o hmr para ver as atualizações:
@jaredpalmer Se isso é algo para o qual você gostaria de ter uma ramificação de recursos, eu poderia trabalhar em algo para um PR. Apenas deixe-me saber. Obrigado por fazer este incrível kit inicial.