I was just wondering what ways you’ve come up with to prevent files created with
mix phx.digest from being commited with the new default layout of Phoenix 1.6.
I.e. in Phoenix 1.6 static files like images etc go directly into the
/priv/static folder by default, and only the generated css and js files in
priv/static/assets are ignored in the
.gitignore file. So if someone runs
mix phx.digest in his development environment and then accidentially just runs
git add .; git commit, all those digested files will be commited as well, something I personally find rather annoying.
My solution for now is that I’ve moved the static asset files to
assets/static, and am then using
rsync all changes during development into
priv/static. I’ve made a more detailed post about it if someone is interested.
However I’m not entirely happy with this approach, because I actually like the idea of simple layouts, i.e. files are in the same place in development like in production. So my open question is basically: Has anyone of you come up with an alternative to this? I’ve thought about using a git pre-commit hook as well, however that did not work as ex
pcected. Or maybe an entirely different idea?
Edit: Changed Topic/Category
You could try configuring the pipeline to output in the same folders it used to be?
I honestly don’t know why this was changed tbh. I guess it has something to do with avoiding copying assets over to the
priv folder. I also don’t recall reading about the process of changing it when Phoenix 1.6 came out, so as of right now I’ve been using Vite to replace Webpack because I found the transition easier than having almost no frontend pipeline out of the box.
Yeah, that’s bascially what I did, as described in the blog post.
I was just wondering if someone had figured out a good setup where the files go directly into
priv/static, maybe with a complicated pre-commit githook or something like that
Could you just .gitignore root folder
priv/static but include some files from it like this?
# Ignore priv/static root folder except some files
/priv/static without / at the end should only ignore the actual folder not subfolders if I remember correctly.
Couldn’t you ignore just the
$ git st | grep static priv/static/favicon-a8ca4e3a2bb8fea46a9ee9e102e7d3eb.ico
Hmm, had that idea as well, but for each .gz file a file with the digest is created as well. I.e. → for a file
foo.txt we get
Hmm, maybe I could find a regex that matches the digests…
Edit: Damn, saw the reply by NobbZ just now
So only solution with way things currently work is to put all files that are not generated to a separate folder that you git include so something like this
and content folder would contain all files that are not generated.
Then you’d have to adjust your .gitignore file every time you need to add a new file to the static folder…
Just replied to Nobbz how it could work but needs you to put all non-generated files under a separate folder.
Maybe a solution, but the files inside
content would still be digested…
According to the discussion on the issue #4505 referred by wanton7, we should run
mix phx.digest.clean --all before running
git add .; git commit.
If you run
mix phx.digest in order to create a release, you can automate this process by a shell script like this:
mix phx.digest.clean --all
.gitignore. It’s error-prone but seems to work for now.