Migrate to Hugo Modules
4 minute read
TL;DR: Conversion for the impatient expert
Run the following from the command line:
cd /path/to/my-existing-site
hugo mod init github.com/me-at-github/my-existing-site
hugo mod get github.com/google/docsy@v0.0
sed -i '/theme = \["docsy"\]/d' config.toml
mv config.toml hugo.toml
cat >> hugo.toml <<EOL
[module]
proxy = "direct"
[[module.imports]]
path = "github.com/google/docsy"
EOL
hugo server
cd my-existing-site
hugo mod init github.com/me-at-github/my-existing-site
hugo mod get github.com/google/docsy@v0.0
findstr /v /c:"theme = [\"docsy\"]" config.toml > hugo.toml
(echo [module]^
proxy = "direct"^
[[module.imports]]^
path = "github.com/google/docsy")>>hugo.toml
hugo server
Detailed conversion instructions
Import the Docsy theme module as a dependency of your site
At the command prompt, change to the root directory of your existing site.
cd /path/to/my-existing-site
Only sites that are Hugo Modules themselves can import other Hugo Modules. Turn your existing site into a Hugo Module by running the following command from your site directory, replacing github.com/me/my-existing-site
with your site repository:
hugo mod init github.com/me/my-existing-site
This creates two new files, go.mod
for the module definitions and go.sum
which holds the checksums for module verification.
Next declare the Docsy theme module as a dependency for your site.
hugo mod get github.com/google/docsy@v0.0
This command adds the docsy
theme module to your definition file go.mod
.
Update your config file
In your hugo.toml
/hugo.yaml
/hugo.json
file, update the theme setting to use Hugo Modules. Find the following line:
theme = ["docsy"]
theme: docsy
"theme": "docsy"
Change this line to:
theme = ["github.com/google/docsy"]
theme:
- github.com/google/docsy
"theme": [
"github.com/google/docsy"
]
Alternatively, you can omit this line altogether and replace it with the settings given in the following snippet:
[module]
proxy = "direct"
# uncomment line below for temporary local development of module
# replacements = "github.com/google/docsy -> ../../docsy"
[module.hugoVersion]
extended = true
min = "0.73.0"
[[module.imports]]
path = "github.com/google/docsy"
disable = false
module:
proxy: direct
hugoVersion:
extended: true
min: 0.73.0
imports:
- path: github.com/google/docsy
disable: false
- path: github.com/google/docsy/dependencies
disable: false
{
"module": {
"proxy": "direct",
"hugoVersion": {
"extended": true,
"min": "0.73.0"
},
"imports": [
{
"path": "github.com/google/docsy",
"disable": false
},
{
"path": "github.com/google/docsy/dependencies",
"disable": false
}
]
}
}
You can find details of what these configuration settings do in the Hugo modules documentation. Depending on your environment you may need to tweak them slightly, for example by adding a proxy to use when downloading remote modules.
Tip
In Hugo 0.110.0 the default config base filename was changed tohugo.toml
.
If you are using hugo 0.110 or above, we recommend renaming your config.toml
to hugo.toml
!Attention
If you have a multi language installation, please make sure that the section[languages]
inside your hugo.toml
is declared before the section [module]
with the module imports. Otherwise you will run into trouble!Check validity of your configuration settings
To make sure that your configuration settings are correct, run the command hugo mod graph
which prints a module dependency graph:
hugo mod graph
hugo: collected modules in 1092 ms
github.com/me/my-existing-site github.com/google/docsy@v0.0
github.com/google/docsy@v0.0 github.com/twbs/bootstrap@v5.2.3+incompatible
github.com/google/docsy@v0.0 github.com/FortAwesome/Font-Awesome@v0.0.0-20230327165841-0698449d50f2
Make sure that three lines with dependencies docsy
, bootstrap
and Font-Awesome
are listed. If not, please double check your config settings.
Tip
In order to clean up your module cache, issue the command hugo mod clean
hugo mod clean
hugo: collected modules in 995 ms
hugo: cleaned module cache for "github.com/FortAwesome/Font-Awesome"
hugo: cleaned module cache for "github.com/google/docsy"
hugo: cleaned module cache for "github.com/twbs/bootstrap"
Clean up your repository
Since your site now uses Hugo Modules, you can remove docsy
from the themes
directory, as instructed below.
First, change to the root directory of your site:
cd /path/to/my-existing-site
Previous use of Docsy theme as git clone
Simply remove the subdirectory docsy
inside your themes
directory:
rm -rf themes/docsy
Previous use of Docsy theme as git submodule
If your Docsy theme was installed as submodule, use git’s rm
subcommand to remove the subdirectory docsy
inside your themes
directory:
git rm -rf themes/docsy
You are now ready to commit your changes to your repository:
git commit -m "Removed docsy git submodule"
Attention
Be careful when using therm -rf
command, make sure that you don’t inadvertently delete any productive data files!