Hugo使用resources.Minify报wrong type for value类型错误
报错原因
报错由两个独立问题共同触发:
- 资源查找路径错位:Hugo 资源处理管道(包含
resources.Get、resources.Minify在内的所有资源操作函数)的固定扫描范围,仅覆盖项目根目录下的assets/文件夹,不会识别public/目录下的任何文件——public/是 Hugo 构建生成的成品输出目录,不属于源资源的读取范围。代码中写的resources.Get "css/styles.css"实际查找路径为<项目根>/assets/css/styles.css,和实际存储在<项目根>/public/assets/css/styles.css的文件路径完全不匹配。 - 空值传入触发类型校验失败:当
resources.Get无法找到匹配资源时,会返回空的resource.Resource类型对象。代码没有对返回值做非空判断,直接将该空对象传入要求resources.ResourceTransformer类型入参的resources.Minify管道,最终触发模板执行时的类型不匹配报错。
修正步骤
- 调整CSS源文件存放位置
将public/assets/css/styles.css下的样式文件,移动到项目根目录下的assets/css/styles.css路径。注意不可将源资源存储在public/目录中,该目录内容会在每次Hugo重新构建时被自动清空覆盖。 - 优化模板代码逻辑,避免空值传参
修改layouts/index.html中的CSS处理代码,在执行压缩操作前先校验资源是否成功加载,最终可正常运行的代码如下:
{{ $styles := resources.Get "css/styles.css" }} {{ with $styles }} {{ $styles = . | resources.Minify }} <link rel="stylesheet" href="{{ $styles.Permalink }}" media="screen" /> {{ end }}
内容的提问来源于stack exchange,提问作者yash
相关产品推荐
相关产品推荐

