2019-10-21 04:22:28 -04:00
---
title: Use Hugo Modules
linktitle: Use Hugo Modules
description: How to use Hugo Modules to build and manage your site.
date: 2019-07-24
categories: [hugo modules]
keywords: [install, themes, source, organization, directories,usage,modules]
menu:
docs:
parent: "modules"
weight: 20
weight: 20
sections_weight: 20
draft: false
aliases: [/themes/usage/,/themes/installing/,/installing-and-using-themes/]
toc: true
---
2019-12-15 04:35:09 -05:00
## Prerequisite
2019-10-21 04:22:28 -04:00
2019-12-15 04:35:09 -05:00
{{< gomodules-info > }}
2019-10-21 04:22:28 -04:00
## Initialize a New Module
Use `hugo mod init` to initialize a new Hugo Module. If it fails to guess the module path, you must provide it as an argument, e.g.:
```bash
hugo mod init github.com/gohugoio/myShortcodes
```
Also see the [CLI Doc ](/commands/hugo_mod_init/ ).
2020-05-31 06:43:23 -04:00
## Use a Module for a Theme
2020-06-16 08:18:51 -04:00
The easiest way to use a Module for a theme is to import it in the config.
2020-05-31 06:43:23 -04:00
1. Initialize the hugo module system: `hugo mod init github.com/<your_user>/<your_project>`
2021-04-20 14:21:45 -04:00
2. Import the theme:
2020-05-31 06:43:23 -04:00
2021-04-20 14:21:45 -04:00
{{< code-toggle file = "config" > }}
2020-05-31 06:43:23 -04:00
[module]
[[module.imports]]
2020-10-06 10:22:20 -04:00
path = "github.com/spf13/hyde"
2021-04-20 14:21:45 -04:00
{{< / code-toggle > }}
2020-05-31 06:43:23 -04:00
2019-10-21 04:22:28 -04:00
## Update Modules
Modules will be downloaded and added when you add them as imports to your configuration, see [Module Imports ](/hugo-modules/configuration/#module-config-imports ).
To update or manage versions, you can use `hugo mod get` .
Some examples:
### Update All Modules
```bash
hugo mod get -u
```
2020-03-09 15:19:32 -04:00
### Update All Modules Recursively
{{< new-in " 0 . 65 . 0 " > }}
```bash
hugo mod get -u ./...
```
2019-10-21 04:22:28 -04:00
### Update One Module
```bash
hugo mod get -u github.com/gohugoio/myShortcodes
```
### Get a Specific Version
```bash
hugo mod get github.com/gohugoio/myShortcodes@v1.0.7
```
Also see the [CLI Doc ](/commands/hugo_mod_get/ ).
## Make and test changes in a module
One way to do local development of a module imported in a project is to add a replace directive to a local directory with the source in `go.mod` :
```bash
replace github.com/bep/hugotestmods/mypartials => /Users/bep/hugotestmods/mypartials
```
2020-06-16 08:18:51 -04:00
If you have the `hugo server` running, the configuration will be reloaded and `/Users/bep/hugotestmods/mypartials` put on the watch list.
2019-10-21 04:22:28 -04:00
2020-11-27 03:26:24 -05:00
Note that since v.0.77.0 you can use modules config [`replacements` ](https://gohugo.io/hugo-modules/configuration/#module-config-top-level ) option. {{< new-in " 0 . 77 . 0 " > }}
2019-10-21 04:22:28 -04:00
## Print Dependency Graph
Use `hugo mod graph` from the relevant module directory and it will print the dependency graph, including vendoring, module replacement or disabled status.
E.g.:
```
hugo mod graph
github.com/bep/my-modular-site github.com/bep/hugotestmods/mymounts@v1.2.0
github.com/bep/my-modular-site github.com/bep/hugotestmods/mypartials@v1.0.7
github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myassets@v1.0.4
github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myv2@v1.0.0
DISABLED github.com/bep/my-modular-site github.com/spf13/hyde@v0.0.0-20190427180251-e36f5799b396
github.com/bep/my-modular-site github.com/bep/hugo-fresh@v1.0.1
github.com/bep/my-modular-site in-themesdir
```
Also see the [CLI Doc ](/commands/hugo_mod_graph/ ).
## Vendor Your Modules
2020-06-16 08:18:51 -04:00
`hugo mod vendor` will write all the module dependencies to a `_vendor` folder, which will then be used for all subsequent builds.
2019-10-21 04:22:28 -04:00
Note that:
* You can run `hugo mod vendor` on any level in the module tree.
* Vendoring will not store modules stored in your `themes` folder.
2020-10-06 10:22:20 -04:00
* Most commands accept a `--ignoreVendorPaths` flag, which will then not use the vendored modules in `_vendor` for the module paths matching the [Glob ](https://github.com/gobwas/glob ) pattern given. Note that before Hugo 0.75 this flag was named `--ignoreVendor` and was a "all or nothing". {{< new-in " 0 . 75 . 0 " > }}
2019-10-21 04:22:28 -04:00
Also see the [CLI Doc ](/commands/hugo_mod_vendor/ ).
## Tidy go.mod, go.sum
Run `hugo mod tidy` to remove unused entries in `go.mod` and `go.sum` .
Also see the [CLI Doc ](/commands/hugo_mod_clean/ ).
## Clean Module Cache
Run `hugo mod clean` to delete the entire modules cache.
2022-04-08 07:32:01 -04:00
Note that you can also configure the `modules` cache with a `maxAge` , see [File Caches ](/getting-started/configuration/#configure-file-caches ).
2019-10-21 04:22:28 -04:00
Also see the [CLI Doc ](/commands/hugo_mod_clean/ ).