ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Hugo 版本(Editions)完全解析:standard、deploy、extended 与 extended/deploy 该如何选

Hugo 版本(Editions)完全解析:standard、deploy、extended 与 extended/deploy 该如何选 Hugo 版本Editions完全解析standard、deploy、extended 与 extended/deploy 该如何选【免费下载链接】hugoThe world’s fastest framework for building websites.项目地址: https://gitcode.com/gh_mirrors/hu/hugoHugo 以单一二进制文件分发但在安装时实际存在四种不同能力的版本Editionstandard、deploy、extended与extended/deploy。本文以官方安装文档 01-editions.md 为主体结合当前仓库源码逐项解析四种版本的功能差异、hugo deploy与嵌入式 LibSass 的实现机制以及基于 Go 构建标签build tag的版本裁剪原理帮助你在安装和 CI/CD 构建时做出准确选择。四种版本核心能力对照默认情况下你应该使用standard版本除非你的项目确实需要额外能力。四种版本的核心差异可以浓缩为下表功能standarddeploy (1)extendedextended/deploy核心功能✔✔✔✔直接云部署 (2)✘✔✘✔LibSass 支持 (3)✘✘✔✔(1) 该版本自 v0.159.2 起新增new-in v0.159.2见 common/hugo/version_current.go当前仓库主版本已演进至 v0.166.0-DEV。(2) 可将站点直接部署到 Google Cloud Storage 存储桶、AWS S3 存储桶或 Azure Storage 容器详见 deploy-with-hugo-deploy 文档。(3) 通过嵌入式 LibSass 将 Sass 转译为 CSS。注意嵌入式 LibSass 已于 v0.153.0 弃用并将在未来版本中移除。请改用与任何版本都兼容的 Dart Sass 转译器。要点归纳deploy 与 extended 是两条正交的能力轴前者决定是否内置hugo deploy云部署命令后者决定是否内置 LibSass 转译能力二者互不包含可自由组合出deploy与extended/deploy。standard 并不残缺它包含 Hugo 的全部核心功能只是不含上述两项附加能力。绝大多数静态站点、博客、文档站点用它即可完成构建与本地开发。deploy 版本内置hugo deploy云部署deploy及extended/deploy版本在二进制中内置了hugo deploy子命令用于把站点发布到三大对象存储服务AWS S3、Azure Blob StorageAzure Storage 容器与 Google Cloud Storage。使用方式与配置在 deploy-with-hugo-deploy.md 中给出了完整的工作流先在项目配置中声明一个部署目标deployment.targets唯一必填参数是name与url[deployment] [[deployment.targets]] name production url s3://my_bucket?regionus-west-1然后执行hugo deploy [--targettarget name]该命令将本地public目录默认发布目录与远端存储桶做同步本地与远端文件列表比对时先比较文件名再比较大小与 MD5 校验和任何差异都会触发重新上传远端存在而本地不存在的文件会被删除--force强制全量重传--confirm/--dryRun先展示差异再执行或停止--maxDeletes可覆盖默认的单次最多删除 256 个远端文件的保护上限。源码层面构建标签如何开关该命令hugo deploy并非在所有构建中都存在而是由withdeploy构建标签决定带withdeploy标签构建时编译的是 commands/deploy.go首行//go:build withdeploy其中注册名为deploy的 Cobra 子命令并调用deploy.New(...)与deployer.Deploy(ctx)完成实际部署流程不带该标签时编译的是 commands/deploy_off.go//go:build !withdeploy此时deploy命令仍然存在但被隐藏cmd.Hidden true执行时会直接报错提示当前 Hugo 版本不支持 deploy请安装文件名带withdeploy的发行版或自行以withdeploy构建标签编译。与之配套common/hugo/vars_withdeploy.go 与 common/hugo/vars_withdeploy_off.go 分别定义IsWithdeploy true/false在 common/hugo/hugo.go 的BuildVersionString中若启用该标签hugo version输出的版本字符串会带上withdeploy后缀。因此你可以通过运行hugo version直接判断当前二进制是否包含云部署能力。extended 版本嵌入式 LibSass 与 Dart Sass 迁移extended及extended/deploy版本内置了 LibSass 转译器可通过模板函数css.Sass别名toCSS把 SCSS/Sass 转译为 CSS完整选项说明见 Sass.md。典型用法{{ $opts : dict transpiler dartsass enableSourceMap true outputStyle compressed targetPath css/main.css }} {{ $r : resources.Get sass/main.scss | css.Sass $opts }}常用选项包括transpilerlibsass或dartsass默认libsass、outputStyleLibSass 下为nested/expanded/compact/compressedDart Sass 下为expanded/compressed、precision浮点精度仅 LibSass默认 8、includePaths解析use/import的附加搜索路径、vars注入hugo:vars命名空间的 Sass 变量等。源码层面非 extended 构建的行为LibSass 转译同样由构建标签控制带extended标签时编译 resources/resource_transformers/tocss/scss/client_extended.go//go:build extended其中的ToCSS通过github.com/bep/golibsass/libsass真正执行转译并把默认精度设为 8bootstrap-sass需要 8 位小数精度而 libsass 默认是 5不带该标签时编译 resources/resource_transformers/tocss/scss/client_notavailable.go//go:build !extendedToCSS直接返回NewFeatureNotAvailableTransformer即功能不可用错误。相应地common/hugo/vars_extended.go//go:build extended与 common/hugo/vars_regular.go//go:build !extended定义IsExtended true/false在 common/hugo/hugo.go 的GetDependencyListNonGo中仅 extended 构建会追加github.com/sass/libsass 3.6.6依赖记录且版本字符串会附加extended后缀。重要迁移提醒LibSass 已弃用嵌入式 LibSass 已于v0.153.0弃用并将在未来版本中移除。当前仓库的 tpl/css/css.go 中可以看到当用户显式传入transpiler libsass时Hugo 会调用hugo.Deprecate(css.Sass: libsass, ...)打印弃用警告同时在 common/hugo/hugo.go 的弃用机制中距弃用版本超过 15 个 minor 版本后警告会升级为构建报错。因此官方建议无论使用哪个版本都改用 Dart Sass 转译器在css.Sass中设置transpiler dartsass它兼容所有 Hugo 版本。Dart Sass 以独立二进制方式工作Hugo 会从 PATH 中自动发现可运行hugo env查看当前生效的转译器Hugo 的 Snap 包已内置 Dart Sass无需另行安装。从 common/hugo/hugo.go 的源码可见Hugo 优先使用dart-sass/sassv2 命名或dart-sass-embeddedv1 命名二进制并支持通过环境变量DART_SASS_BINARY显式指定。源码视角版本由 Go 构建标签决定综合上文四种版本的差异全部由两个独立的 Go 构建标签在编译期决定相关文件均位于 common/hugo/ 目录构建标签编译的文件效果extendedvars_extended.go / client_extended.goIsExtended true启用 LibSass!extended默认vars_regular.go / client_notavailable.goIsExtended falseLibSass 不可用withdeployvars_withdeploy.go / commands/deploy.goIsWithdeploy true启用hugo deploy!withdeploy默认vars_withdeploy_off.go / commands/deploy_off.goIsWithdeploy falsedeploy命令隐藏并报错官方发行版的四种二进制正是这四个标签组合的产物如果你自行从源码编译入口为 main.go也可以通过go build -tags extended,withdeploy之类的方式定制自己需要的版本组合。如何选择与验证先选 standard普通站点构建、本地开发、部署到 GitHub Pages / Netlify 等平台standard 即可需要 Sass 编译且不想安装 Dart Sass选 extended或 extended/deploy但鉴于 LibSass 已弃用新项目更推荐 standard 外部安装 Dart Sass需要hugo deploy一键部署到 S3 / Azure Blob / GCS选 deploy或 extended/deploy也可在任意版本上改用各平台自身的 CLI 完成部署验证当前二进制运行hugo version查看版本字符串是否带extended或withdeploy后缀运行hugo env查看 Dart Sass 等外部转译器是否就绪。需要再次强调的是四种版本共享同一套核心代码差异仅在于上述两个编译开关因此无论选择哪个版本Hugo 的核心构建能力、模板系统与站点性能都完全一致。【免费下载链接】hugoThe world’s fastest framework for building websites.项目地址: https://gitcode.com/gh_mirrors/hu/hugo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表