live_svelte
live_svelte copied to clipboard
Creating files under assets/svelte/_build for ~V
assets/svelte/_build contains artifacts from llive views that use the ~V sigil.
This directory seems to be created when I run (among other mix commands) mix phx.server. However, this directory is not getting created. I'm using live_svelte version 0.11.0.
This has happened to me before and it "Just Started Working." However, I seem to have broken the ~V sigil's magic permanently this time.
I'd rather not have to do this, but this is the only thing that works when my project gets into this state:
rm -rf _build
mix setup
mix phx.server
This is a regression probably. Need to investigate, thanks for reporting it!
Don't think that this is a regression. I think it is because v sigil is a macro and gets called during compilation of a module. Copying of a script happens when module compiles. If you change module - it recompiles and macro copies new script. But if you've already compiled everything and nothing have changed in the module then it will not be recompiled and macro will not be called.
That's why deleting _build helps - it forces recompilation.
I deleted assets/svelte/_build and that was the beginning of my trouble. Here's what doesn't work after that (followed by mix setup; mix phx.server):
mkdir assets/svelte/_buildAnd/or:touch lib/my_app/live/svelte/*.ex## these are the only files have the ~V sigil
Deleting ./_build fixes the problem, but rebuilding takes too long. Is there a shortcut?
This is not a regression. This happened before 0.11.
assets/svelte/_build is an artifact of building process. Why do you delete it?
Yeah, touching a relevant file will lead to its recompilation, I don't think there will be a better shortcut than that.
Touching / modifying .ex files with ~V sigil and running mix setup ; mix phx.server doesn’t create files in assets/svelte/_build when that directory is empty. It’s easy to reproduce. Just:
rm -rf assets/svelte/_build
# modify or touch .ex files
mix setup
mix phx.server
Ok, my bad, so there is an issue, modifying definitely should rerun macro...
I added some body text to my sigil template and that worked!
Touching files or adding whitespace, comments, etc. - anything that is removed by the compiler -- does not work.
I usually run into this bug when I switch branches. When the generated files for the ~V sigil are out of date, I delete the assets/svelte/_build directory hoping that they will be rebuilt. I used to just rebuild from an empty _build directory but I decided to put some time into poking it.
I don't think there's a bug if a file's timestamp goes "backwards" (which can happen with git pull). If the file's nontrivial content changes, the macro does create a build artifact. Although I think this has happened to me, I have not tried to reproduce it intentionally.
To recap:
- If you delete all files in
assets/svelte/_buildwhile the app is running and modify a *.ex file that contains a~Vsigil,assets/svelte/_buildfiles are not created. - If you remove
assets/svelte/_buildand start the app withmix phx.server,assets/svelte/_buildfiles are also not created. IMO, this is the worst bug.
After deleting all files in assets/svelte/_build, the only known steps that result in assets/svelte/_build files are:
- Perform either or both of the following:
- Delete
./_build - Modify
*.exfiles containing~Vsigil in some significant way -- merely touching them doesn't work, and adding whitespace or comments that are "compiled out" doesn't work either
- Run
mix phx.server