Downloading Hugo modules over and over again (after reboots) is something I want to avoid. I can see that there is a config variable for changing the Hugo module cache, but I don’t know how to set this globally.
Set the HUGO_CACHEDIR
environment variable. The “how” depends on your OS.
On Ubuntu, add this to bottom of $HOME/.bashrc:
export HUGO_CACHEDIR=$HOME/.local/share/hugo
To test, open a new terminal and
echo $HUGO_CACHEDIR
Thanks for your suggestion. But I want something more fine-grained. Setting HUGO_CACHEDIR also writes build cache to disk which is what I’d like to avoid.
Earlier (v0.90), I used to have HUGO_CACHES_MODULES set but that functionality seems to have gone in current version (0.92.1).
You need to specify the entire key:
export HUGO_CACHES_MODULES_DIR=$HOME/.local/share/hugo
You were missing the DIR part.
My Hugo modules are not downloading after reboots, only if they are updated. Maybe something more global is afoot?
Other than that, have you looked into “vendoring” where you load your modules into a vendor folder? That is more or less used to add a “node_modules-type” directory for golang modules to your repo.
You can configure your modules to allow only vendoring certain folders/files or nothing at all.
Hugo(v0.92.1+extended) doesn’t seem to pick this up. Could you please test this on your end?
For me, modules are downloaded in /tmp/hugo_cache/modules
. On my machine, tmpfs is mounted on the RAM, which is cleared after every reboot.
I did. It works perfectly.
Remember, you have to start a new terminal session after making the change.
The solution @jmooring described will work only if the folder up to ~/.local/share/
exist and Hugo has writing access. That might be the missing link. Especially with Snap-Hugo.
I’m using Hugo from Arch’s official repo. I even tried the binary on GitHub releases, with the same behaviour.
That’s weird. I have set the environment variable properly, but it still doesn’t work. Here’s my shell session.
~/GitHub/bitbanged.com main !4 ?1 ❯ export HUGO_CACHES_MODULES_DIR=$HOME/.local/share/hugo 5s
~/GitHub/bitbanged.com main !4 ?1 ❯ hugo version
hugo v0.92.2-CDF6A0D6+extended linux/amd64 BuildDate=2022-02-11T14:17:39Z VendorInfo=gohugoio
~/GitHub/bitbanged.com main !4 ?1 ❯ hugo server
Start building sites …
hugo v0.92.2-CDF6A0D6+extended linux/amd64 BuildDate=2022-02-11T14:17:39Z VendorInfo=gohugoio
| EN
-------------------+------
Pages | 85
Paginator pages | 0
Non-page files | 63
Static files | 0
Processed images | 141
Aliases | 0
Sitemaps | 1
Cleaned | 0
Built in 937 ms
Watching for changes in /home/subaru/GitHub/{bitbanged.com,hugo-yoru}
Watching for changes in /tmp/hugo_cache/modules/filecache/modules/pkg/mod/github.com/!utkarsh!verma/hugo-modules/bootstrap-v5@v0.0.0-20220106145939-09cc0f355a13/_vendor/github.com/popperjs/popper-core/{index.d.ts,lib,package.json}
Watching for config changes in /home/subaru/GitHub/bitbanged.com/config.yaml, /home/subaru/GitHub/hugo-yoru/config/_default, /home/subaru/GitHub/bitbanged.com/go.mod
Environment: "development"
Serving pages from memory
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
Press Ctrl+C to stop
^C%
~/GitHub/bitbanged.com main !4 ?1 ❯ echo $HUGO_CACHES_MODULES_DIR
/home/subaru/.local/share/hugo
~/GitHub/bitbanged.com main !4 ?1 ❯ ls -lha
~/GitHub/bitbanged.com main !4 ?1 ❯ tree $HUGO_CACHES_MODULES_DIR ✘ INT
/home/subaru/.local/share/hugo
0 directories, 0 files
I think I’ve noticed the cause of all this. I think it is being caused by replace
rules in my go.mod
which causes modules to default to /tmp/hugo_cache
.
Is this an expected behaviour or should I create an issue for this?
I experienced issues with Hugo when having a redirect rule without existing target folder (the redirected module) some weeks back and moved to define them via environment variable now. Not sure if that helps, but there might be a deeper issue here.
And a second thing: in my scripts I am using the env command, not just an export. Maybe hugo is blind to your console session (my sample is the replacements, but could apply to the directory env too? Note that there is no &&
in between.
env HUGO_MODULE_REPLACEMENTS="${HUGO_MODULE_REPLACEMENTS}" \
hugo server