【问题标题】:Using Live Reload with Jekyll在 Jekyll 中使用 Live Reload
【发布时间】:2012-01-13 19:06:30
【问题描述】:

我开始使用Jekyll static site generator,我想使用Live Reload。我知道 Jekyll 有生成器和服务器命令,Live Reload 可以运行各种编译器和自定义命令。如何配置这些以协同工作?

【问题讨论】:

    标签: ruby jekyll


    【解决方案1】:

    LiveReload 内置在 Jekyll 3.7+ 中。

    jekyll serve --livereload
    

    您还可以设置 LiveReload 的端口、延迟和忽略文件。见jekyll help serve

    【讨论】:

    • 它会在我的终端中重新生成保存的文件,但不会刷新浏览器。这就是我想要的。
    【解决方案2】:

    更新:正如其他答案中所指出的,LiveReload 内置于 Jekyll 3.7+ 中。

    jekyll serve --livereload
    

    对于旧版本:

    我发现最简单的方法是使用两个终端窗口:一个用于jekyll serve --watch,一个用于guard

    我尝试了guard-jekyll-plus approach suggested by Nobu,但出现了一堆错误。

    作为shumushin pointed out,Jekyll 可以处理自动重建过程,您只需使用jekyll serve --watch 启动它

    现在在第二个终端窗口中使用 guard-livereload 让 LiveReload 正常运行。这个和Jan Segre's answer基本一样,只是没有guard-jekyll

    我的Guardfile 看起来像这样:

    guard 'livereload' do
      watch(/^_site/)
    end
    

    还有我的Gemfile

    gem 'jekyll'
    gem 'guard'
    gem 'guard-livereload'
    

    注意:您仍然需要在index.html 页面中包含 livereload 脚本;它是将guard-livereload 和浏览器绑定在一起的“胶水”。

    <script src="http://localhost:35729/livereload.js"></script>
    

    【讨论】:

    • 简单有效。在与Pow 一起使用时,我将jekyll serve -w 替换为jekyll build -w。虽然它现在给出了重复的观察通知,可能是因为 Pow 也在观察变化?
    • 我收到了403 Forbidden。任何想法?使用bundle exec guard
    • --livereload 参数是在 Jekyll 3.70 上引入的。从现在开始,您只需输入:jekyll s -l.
    【解决方案3】:

    guard-livereload 可以与guard-jekyll 一起使用,并使用guard 集中观看过程,例如(我还没有测试过):

    • 通过 gem 或 bundler 安装guard-jekyll
    • 通过 gem 或 bundler 安装 guard-livereload

    初始化guard-jekyll

    guard init jekyll
    

    将此添加到您的 Guardfile:

    guard 'livereload' do
      watch(%r{_site/.+})
    end
    

    您可以调整以上内容以更好地适应您的项目,并且 你可能已经知道你必须包含 livereload 页面上的脚本:

    <script src="http://localhost:35729/livereload.js"></script>
    

    哦,开始整个观看混乱:

    guard
    

    【讨论】:

    • 酷,谢谢!我之前尝试过一次,但后来意识到我正在运行另一个我不知道的 livereload 服务器。我再试一次。
    • 有一个option 可以更改端口,有时总是使用同一个端口会变得很乱。
    • 嘿伙计,livereload watch(%r{_site/.+)}) 有一个额外的括号,应该是 watch(%r{_site/.+})
    • 插入 &lt;script src="http://localhost:35729/livereload.js"&gt;&lt;/script&gt; 不太好,因为这些部分可能不需要提交给 git。
    • @zyxue 确实如此,尽管添加一些条件以在模板上呈现它是非常合理的,例如{{#dev}}&lt;script ...&gt;&lt;/script&gt;{{/dev}}
    【解决方案4】:

    对于 jekyll 1.0+ 使用:

    jekyll serve --watch
    

    有关更多详细信息和选项,请参阅Jekyll: Basic Usage

    【讨论】:

    • 与 Jekyll 的最新改进相比,这个问题相对较旧。感谢您跟进更新版本的答案。
    • 这不会通知 LiveReload,是吗?
    • 这是不正确的。 Jekyll 将重新编译所有内容,但不幸的是,它不处理实际浏览器的任何实时重新加载/刷新。
    • 为什么这个答案的投票率如此之高?问题是询问 LiveReload 不会通过 --watch 标志自动重新生成。
    • 我否决了这个答案;它没有回答原来的问题。
    【解决方案5】:

    更新:这不再适用于最新版本的 Jekyll

    cd your/site/folder
    jekyll --server --auto
    

    【讨论】:

    • 参见。 @shumushin 对最新版本的 Jekyll 的回答。
    • 问题是关于 LiveReload,这并没有解决问题。
    【解决方案6】:

    这篇文章解释了一种更简洁的方式 - Setting Up LiveReload With Jekyll

    宝石文件:

    gem 'jekyll'
    gem 'guard'
    gem 'guard-jekyll-plus'
    gem 'guard-livereload'
    

    保护文件:

    guard 'jekyll-plus', :serve => true do
      watch /.*/
      ignore /^_site/
    end
    
    guard 'livereload' do
      watch /.*/
    end
    

    安装any LiveReload browser extension。然后运行guard

    【讨论】:

    • 这对我有用。 kikito、balexand、shumushin 的答案不会导致浏览器重新加载,并且接受的答案对我不起作用(我怀疑已经过时了)
    • 我在 Windows 上遇到了这个问题,因为它缺少 fork()
    【解决方案7】:

    我编写了一个名为 Hawkins 的 Jekyll 插件,它将 LiveReload 合并到 Jekyll watch 进程中。它适用于 Jekyll 3.1 及更高版本。

    只需添加

    group :jekyll_plugins do
      gem 'hawkins'
    end
    

    到您的 Gemfile(然后是 bundle install)。从那里你可以运行jekyll liveserve。 Hawkins 将修改您页面的head 部分以包含 LiveReload 所需的组件,并且当 Jekyll 检测到页面更改时,Hawkins 将通过 WebSockets 将消息推送到您的浏览器。请注意,您需要支持WebSockets 的浏览器。对于非常快速的重新加载,您可以使用 Jekyll 的新 --incremental 选项,它只会重新生成更改的页面。

    【讨论】:

    • 我查过,Hawkins 只兼容 Jekyll 3.1 及更高版本。
    • 太棒了,这个后卫等没有什么东西,确实可以。可能想添加“bundle init”,但人们可以弄清楚:-)
    【解决方案8】:

    首先在您的站点文件夹中正常运行 jekyll:

    cd your/site/folder
    jekyll
    

    默认情况下,Jekyll 会在其中生成一个名为 _site 的文件夹 (your/site/folder/_site)。

    告诉 LiveReload 观看 _site 文件夹。

    【讨论】:

    • jekyll 命令会监视文件更改并自动重新生成它们吗?
    • 是的,如果“auto”变量在配置文件或命令行中设置为 true。在这里查看:github.com/mojombo/jekyll/wiki/Configuration
    • 在这种情况下 LiveReload 的目的是动态地重新加载页面,这样您就不必这样做了。它仍然很有用,你只是碰巧不需要 LiveReload 的一半功能用于 jekyll 的生成器。
    • 这是实现这一目标的最简单方法——您根本不需要弄乱保护文件
    【解决方案9】:

    此命令将在浏览器中打开您的网站并使用 jekyll 内置的 livereload 服务器。

    bundle exec jekyll serve -l -o

    您需要最新的 jekyll 版本。

    【讨论】:

      【解决方案10】:

      我今天刚开始使用 GitHub Pages,希望能够通过 Jekyll 使用实时重新加载。得到它的工作并在Creating GitHub Pages with Jekyll & LiveReload上写了我的第一篇文章。

      它使用带有 grunt-contrib-watch 插件的 Grunt,而不是 Jekyll 的 serve 命令 - 对我来说效果很好。希望它也适用于您。

      【讨论】:

        【解决方案11】:

        你可以只使用jekyll serve -w,我比较喜欢这个选项,因为我很懒。

        【讨论】:

          【解决方案12】:

          对于实时重新加载, 从项目根目录中的 Gemfile 中删除 Jekyll Admin,它的作用就像魅力一样。

          【讨论】:

            【解决方案13】:

            如果您经常运行它,Repla macOS 应用程序可以轻松启动 Jekyll,从而自动刷新。安装 Repla 后,您可以从 Jekyll 博客的根目录运行它,并将 jekyll serve 命令传递给它。例如:

            repla server "bundle exec jekyll serve --watch --drafts" -r "...done"
            

            Repla 将被配置为每次在控制台中打印 ...done 时刷新,Jekyll 在完成编译您的站点时打印。

            Repla 在显示您网站的浏览器拆分下方的拆分中运行 Jekyll 服务器进程:

            Jekyll 在 Repla 中运行后,还可以使用⌘S 将配置保存到文件中,关闭窗口关闭,双击文件再次运行。换句话说,你下次只需打开文件就可以重新开始你的 Jekyll 博客,完全不需要终端。

            披露:我维护 Repla 应用程序。

            【讨论】:

              猜你喜欢
              • 2017-07-30
              • 2013-04-20
              • 1970-01-01
              • 2022-10-08
              • 2018-08-24
              • 2013-05-09
              • 2017-12-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多