После изменения файла актива (css или js) я вижу в журналах, что изменение было замечено и скомпилировано, а браузер также автоматически перезагружается.
[debug] Live reload: priv/static/js/app.js
10:53:15 - info: compiled MyComponent.jsx and 2095 cached files into 2
files in 2.3 sec
Однако не похоже, что активы в /priv/static
действительно были обновлены. Я могу увидеть свои изменения в браузере только после запуска mix phx.digest
и жесткого обновления браузера.
Есть идеи, как это исправить?
С использованием:
config / dev.exs:
config :my_app, MyApp.Web.Endpoint,
http: [port: 4000],
debug_errors: true,
code_reloader: true,
check_origin: false,
watchers: [node: ["node_modules/brunch/bin/brunch", "watch", "--stdin",
cd: Path.expand("../assets", __DIR__)]]
# Watch static and templates for browser reloading.
config :my_app, MyApp.Web.Endpoint,
live_reload: [
patterns: [
~r{priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$},
~r{priv/gettext/.*(po)$},
~r{lib/my_app/web/views/.*(ex)$},
~r{lib/my_app/web/templates/.*(eex)$}
]
]
Я столкнулся с той же проблемой, и мне помогло вручную удалить папку static
с помощью rm -rf priv/static
и перезапустить сервер с помощью mix phx.server
. После этого горячая перезагрузка работала без необходимости постоянно запускать mix phx.digest
вручную.
TL; DR - Если вы не установите параметр cache_static_manifest
на своей конечной точке, он не будет генерировать URL-адреса с поддержкой версий.
Итак, я знаю, что опаздываю здесь примерно на три года, но недавно я понял это. Я обнаружил, что простая установка значения cache_static_manifest
в конфигурации конечной точки заставит ее использовать дайджест в любом режиме. (Этот является задокументирован, но не так, как мне показалось особенно ясным.)
Теперь вы можете подумать: «Но я не устанавливал это в режиме dev
». Я тоже так думал, пока не понял, что написал наивный config/runtime.exs
.
В то время я был сосредоточен на настройке среды выполнения при запуске выпуска, но совершенно забыл, что он настраивает вещи, даже когда нет работает в выпуске. Как только я сделал это условным, все было хорошо.
Пример:
if Config.config_env == :production do
config :my_app, MyAppWeb.Endpoint, cache_static_manifest: "priv/static/cache_manifest.json"
end
Другая возможная причина заключается в том, что модуль конечной точки (lib/my_app_web/endpoint.ex
) настраивает Plug.Static
на использование сжатых ресурсов:
defmodule MyAppWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :my_app_web
plug Plug.Static,
# ...
gzip: true,
Затем, если выпуск был создан из каталога проекта, а сжатые с помощью gzip ресурсы все еще присутствуют при разработке, они будут обслуживаться вместо вновь сохраненных несжатых ресурсов.
Чтобы этого избежать:
config/dev.exs
:
config :my_app, :environment, :dev
config/test.exs
:
config :my_app, :environment, :test
config/prod.exs
:
config :my_app, :environment, :prod
lib/my_app_web/endpoint.ex
:
defmodule MyAppWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :my_app_web
in_prod = Application.get_env(:my_app, :environment) == :prod
plug Plug.Static,
# ...
gzip: in_prod,