Add folder to mix assets.deploy

Background

I have a project that has a folder for image it uses. I call this folder images.

Issue

Usually when I do mix assets.deploy from the root of my project everything is compiled and phoenix puts the images it needs inside priv/static/.

However, these images are not being used in templates nor in renders. They are being used by elixir-desktop. So because of this when I use mix assets.deploy these images are not bundled together with everything else.

Question

I have read the introduction to deployment guide: Introduction to Deployment — Phoenix v1.6.15

But it does not address my issue. Is there a configuration I can change to add my images folders? I believe this would have to go into mix.exs or something amongst those lines.

You’d need to be more concrete what assets.deploy is setup to do in your application. By default on a new phoenix app with esbuild it’ll only handle js/css and no images in the first place.

As @LostKobrakai pointed out, mix assets.deploy just processes js/css from assets folder.

Rest of the images, svgs, icons, robots.txt, canary.txt, ads.txt, favicon, etc, you need to place them directly priv/static folder.

I guess, it just minifies, compresses and generates file hash on js/css files.

However the images are compressed by us, so they are directly placed in priv/static folder and the mix assets.deploy works on those images in place:


Excerpt from Introduction to Deployment:

This step is required only if you have compilable assets like JavaScript and stylesheets. By default, Phoenix uses esbuild but everything is encapsulated in a single mix assets.deploy task defined in your mix.exs.

And that is it! The Mix task by default builds the assets and then generates digests with a cache manifest file so Phoenix can quickly serve assets in production.


P.S. I fumbled in the beginning as well, but I just saw existing projects by other people and figured out that you just leave images and such in priv/static folder.

But isn’t the priv/static folder automatically generated?
Am I meant to add my images/static files there ?(i.e. is this a good practice?)

It used to, but hasn’t been since 1.6 – based on the generated setup of a fresh phoenix install.

1 Like

Yup, it’s a good practice.

Let me find an official documentation.


As @LostKobrakai mentioned, it’s a new way of doing it after webpack was removed!


Note running mix phx.digestwill create digested files for all of the assets in priv/static , so your images and fonts are still cache-busted.

https://hexdocs.pm/phoenix/1.6.1/asset_management.html#images-fonts-and-external-files

1 Like