2

我正在使用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
4

2 回答 2

5

您甚至不需要特殊的 gem - 您可以将多个配置文件传递给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 将按照您传递它们的顺序应用它们,因此第二个文件中的设置将覆盖第一个文件中的设置,最后将设置为bundle和。compresstrue


如果您无法控制将传递给哪些参数jekyll build (可能在 GitHub Pages 上?我从未使用过它,但也许......)您可以做同样的事情,只是反过来:

  • 在默认配置文件中设置bundlecompresstrue
  • 每当您发布时,请使用第二个_config-dev.yml文件进行设置bundlecompress再次设置false
于 2014-10-29T16:26:46.717 回答
1

gueard-jekyll-plusgem 允许您配置多个配置文件,其中后面的配置文件覆盖前面的配置文件。我有一个相同的设置,我有一个_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 和 Asset Pipeline 一文中详细介绍了 Gem 的大部分基本设置。

难道你也不能这样做:

> jekyll build --config _development.yml

用不同的配置文件构建?

于 2013-11-06T19:14:59.053 回答