如何设置与获取hguo environment
目录
与 nodejs 的 process.env
一样,hugo 与提供了类似的变量。这个变量在你用 hugo 来生成不同环境的网页版本时,非常有用。
常见的应用场景 #
在模板中区分环境 #
比如仅是为了在本地开发 hugo 模板或编写文章内容想看看效果,但并不想这个效果现在就发布,那么此时在模板中可以这样写:
{{ if eq (hugo.Environment "production" )}}
<div> 当时是生产模式 </div>
{{ else }}
<div> 当前是开发模式 </div>
{{ end }}
区分配置文件 #
当然,还可以用来区分配置文件。比如本站的正常的互联网上访问 url 地址是 https://youwu.today
。但在本地开发模板或者编写文章里,并没有需要使用到这个域名,通常是使用本机名称或者 localhost 来替代。那么为了可以在 hugo 自动识别,这时你的配置文件可以这样组织。
config.toml
config
├── _default
│ ├── config.toml
│ ├── languages.toml
│ ├── menus.yaml
│ └── params.toml
└── production
└── config.toml
其中 baseURL
变量在 config.toml 中为:
...
baseURL = "/"
...
在 config/production/config.toml 中为:
baseURL = "https://youwu.today"
根据 hugo 中模板的读取规则,按照优先级从高到低排列为:
- 对应环境的配置。若此时 hugo.Environment 为
production
时,那么 config/production/config.toml 中的配置将起作用 - config/_default
- config.toml
那么在 hugo 渲染模板时,若遇到诸如 {{ page.Permalink }}
、
{{ print "skill/hugo/" | absURL }}
时,发布时的版本前缀均为 https://youwu.today
。
如何设定 hugo.Environment 的值 #
hugo.Environment
的值可以通过以下这些方式来设定。
在命令行启动时指定 #
作为 hugo 启动命令的参数,一般开发时使用命令 hugo server
来启动 dev 模式的 hugo 服务。但是可以使用参数 --environment production
来强制指定 environment 的值。
默认值 #
在命令行不指定 --environment
时,hugo.Environment
的值大致有这些情况:
hugo server
启动的,hugo.Environment
为development
hugo
启动生成整站静态网页的,hugo.Environment
为production
需要注意一个细节,当使用
hugo -w
启动生成静态网页并监控变化持续生成时,此时的hugo.Environment
是development
,而不是production
。