如何才能覆盖Jekyll构建命令,仅在构建时设置一些配置选项?

时间:2013-08-10 05:43:32

标签: ruby jekyll

我正在使用Jekyll Asset Pipeline构建我的网站,我只想在发布时压缩网站(大约需要20秒)。为此,我必须在配置文件中以编程方式启用这些值:

asset_pipeline:
  bundle: false
  compress: false

我试图编写插件但它无法正常工作。有人可以帮助我吗?

module Jekyll
    module Commands
        # I overwrite this here so we only do heavy work (like compressing HTML and stuff)
        # when we are building the site, not when testing (which uses jekyll serve)
        class << Build
            alias_method :_process, :process
            def process(options)
                require 'jekyll-press'
                options['asset_pipeline']['bundle'] = true
                options['asset_pipeline']['compress'] = true
                _process(options)
            end
        end
    end
end

2 个答案:

答案 0 :(得分:3)

您甚至不需要特殊的宝石 - 您可以将多个配置文件传递给jekyll build

首先,常规配置文件,包含所有始终需要的设置,以及禁用压缩的值,因为每次在本地构建时,并不总是希望它运行:

_config.yml:

destination: _site
source: src
markdown: rdiscount
# ... and many more settings that are always needed

asset_pipeline:
  bundle: false
  compress: false

然后,您需要第二个用于发布的配置文件,该文件仅覆盖您实际想要的不同值:

_config-publish.yml:

asset_pipeline:
  bundle: true
  compress: true

因此,当您不发布时,您只需像以前一样运行jekyll build

但是当你发布时,你会以正确的顺序传递两个配置文件:

jekyll build --config _config.yml,_config-publish.yml

Jekyll将按照您传递的顺序应用它们,因此第二个文件中的设置将覆盖第一个文件中的设置,bundlecompress将设置为{{1}最后。


如果您无法控制将哪些参数传递给true (可能在GitHub页面上?我从未使用过它,但也许......)您也可以这样做事情,反过来说:

  • 在默认配置文件中将jekyll buildbundle设置为compress
  • 每当您发布时,请使用第二个true文件将_config-dev.ymlbundle再次设置为compress

答案 1 :(得分:1)

gueard-jekyll-plus gem允许您配置多个配置文件,其中后者覆盖前者。我有一个相同的设置,我有一个_development.yml文件,关闭开发工作的所有资产编译设置。是的,你必须保持警惕,但它使刷新网站变得简单。以下是相关部分:

guard 'jekyll-plus', extensions: %w[slim yml scss js md html xml txt rb], serve: true,    rack_config: 'config.ru', config: ['_config.yml', '_development.yml'] do
  watch /.*/
  ignore /^build/
end

我在文章Integrate Jekyll with Slim, Zurb Foundation, Compass and an Asset Pipeline中详细介绍了Gem的大部分基本设置。

你也不能这样做:

> jekyll build --config _development.yml

使用不同的配置文件构建?