TL;DR
require 'jekyll'
conf = Jekyll.configuration({
'source' => 'path/to/source',
'destination' => 'path/to/destination'
})
Jekyll::Site.new(conf).process
但是你是怎么发现的?
我通过查看the source code 发现了这一点。当您运行jekyll build 时,您将进入源文件bin/jekyll。这里有趣的部分是
command :build do |c|
# ommitted
c.action do |args, options|
options = normalize_options(options.__hash__)
options = Jekyll.configuration(options)
Jekyll::Commands::Build.process(options)
end
end
嗯,看起来实际工作是在Jekyll::Commands::Build.process中完成的,那么我们来看看lib/jekyll/commands/build.rb中的那个方法:
def self.process(options)
site = Jekyll::Site.new(options)
self.build(site, options)
# other stuff
end
再一次,真正的魔法发生在其他地方,即在Jekyll::Commands::Build.build,也在lib/jekyll/commands/build.rb
def self.build(site, options)
# some logging going on here
self.process_site(site)
end
这又调用了一个名为process_site的类方法,它来自lib/jekyll/command.rb中定义的超类Jekyll::Command
def self.process_site(site)
site.process
rescue Jekyll::FatalException => e
# some error handling
end
所以我们实际上想在Jekyll::Site 上调用process。我们还没有弄清楚的一件事是如何为Jekyll::Site 实例指定选项。让我们仔细看看lib/jekyll/site.rb
def initialize(config)
# more options ...
self.source = File.expand_path(config['source'])
self.dest = File.expand_path(config['destination'])
# more options ...
end
所以显然我们需要提供一个带有指向所需目录的'source' 和'destination' 键的哈希。 Jekyll 将使用我们之前在bin/jekyll 中看到的Jekyll.configuration 方法生成其余配置。就是这样。现在,唯一剩下要做的就是将各个部分放在一起;-)