草庐IT

ruby - jekyll 观看 haml 和 sass

coder 2025-07-16 原文

我已经有一个在不同文件夹中包含 .haml 和 .scss 文件的项目。

我按照这里的指南 http://winstonyw.com/2013/02/24/jekyll_haml_sass_and_github_pages/ 创建了 _plugins/haml.rb_plugins/sass.rb

我将我所有的 .scss 文件移动到 ./assets/css/ 文件夹中

为了确保,我还创建了 layouts 文件夹并将所有 .haml 文件放在其中。

我运行了 jekyll serve --watch 并且这些 .haml/.scss 文件没有在 _sites 中转换为 .html 或 .css 文件。我也无法通过浏览器访问它们。

我在这里试过这个文件,但对 https://gist.github.com/radamant/481456#file-haml_converter-rb 没有任何帮助

那么我做错了什么以及如何实时观看所有 .haml/.scss 文件?

我来自 middlemanapp 世界,所以 jekyll 对我来说是新的。

更新 1:

我的高级目标是:

  1. 使用 Jekyll 通过 Sass 和 Haml 进行前端开发

  2. 它必须监视文件中的更改

  3. 它必须转换 .sass/。 scss 文件和 Haml 到 .css 和 .html 在 watch 上。这意味着我可以访问 http://localhost:4000/index.html 而实际上我有 index.haml 作为 Haml

  4. 我的项目不遵循 Jekyll 文档中所述的目录结构(包括布局文件夹和其他文件夹)。这必须能够检测到其他文件夹中的.sass和.haml文件(我可以指定这个)

  5. 我不想修改 header 中的任何 .sass 或 .scss 文件以使 Jekyll 检测到它。因为我已经有很多(来自 Bootstrap)

更新 2:

这是我的新_config.yml

source:      .
destination: ./_site
plugins:     ./_plugins
layouts:     .

基本上我想将所有 .haml 文件放在主文件夹中,而不是 layouts。在 _plugins 中,我有 _plugins/haml.rb_plugins/sass.rb 如上所述。尽管如此,当我在主文件夹中创建示例 index1.haml 时它仍然不起作用,当 --watch

时它没有被转换

更新 3:

这是我的目录结构:

/www

 /_plugins

  haml.rb

  sass.rb

 /_layouts

  index1.haml

 _config.yml
 index1.haml

haml.rb 中:

module Jekyll
  require 'haml'
  class HamlConverter < Converter
    safe true
    priority :low

    def matches(ext)
      ext =~ /haml/i
    end

    def output_ext(ext)
      ".html"
    end

    def convert(content)
      engine = Haml::Engine.new(content)
      engine.render
    rescue StandardError => e
      puts "!!! HAML Error: " + e.message
    end
  end
end

index1.haml 中(两个文件内容相同):

!!!
%html
  %head
    %meta{charset: "utf-8"}/
    %meta{content: "initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width", name: "viewport"}/
    %title
  %body
    Test Test

_config.yaml

---
source:      .
destination: ./_site
plugins:     ./_plugins
layouts:     ./_layouts
---

这对我仍然不起作用。没有生成 .html 文件。

更新$:

将此添加到 .haml 文件有效:

---
title: Index
---

但是,我可以修改 .haml 文件,但我尽量避免对 .sass/.scss 文件这样做。我有很多来自 Bootstrap 和其他工作。有什么解决方法吗?

最佳答案

听起来您没有正确的 Jekyll 配置来指定您的 source 目录。

您可以通过参数指定配置来构建事物,如下所示: jekyll serve --source assets --destination public

但是从那里获取一个 _config.yml 示例可能会更好。 Basic Usage 中描述了您面临的情况文档。

从一个非常简单的 _config.yml 开始,其中包含:

source:      source
destination: public

确保您的 _plugins_layoutssource 目录的子目录。

如果您不创建自己的配置,那么 default config用来。如果你想使用这个配置,确保你的结构和工具集匹配它:

source:      .
destination: ./_site
plugins:     ./_plugins
layouts:     ./_layouts
include:     ['.htaccess']
exclude:     []
keep_files:  ['.git','.svn']
gems:        []
timezone:    nil
encoding:    nil

future:      true
show_drafts: nil
limit_posts: 0
highlighter: pygments

relative_permalinks: true

permalink:     date
paginate_path: 'page:num'
paginate:      nil

markdown:      kramdown
markdown_ext:  markdown,mkdown,mkdn,mkd,md
textile_ext:   textile

excerpt_separator: "\n\n"

safe:        false
watch:       false    # deprecated
server:      false    # deprecated
host:        0.0.0.0
port:        4000
baseurl:     ""
url:         http://localhost:4000
lsi:         false

maruku:
  use_tex:    false
  use_divs:   false
  png_engine: blahtex
  png_dir:    images/latex
  png_url:    /images/latex
  fenced_code_blocks: true

rdiscount:
  extensions: []

redcarpet:
  extensions: []

kramdown:
  auto_ids: true
  footnote_nr: 1
  entity_output: as_char
  toc_levels: 1..6
  smart_quotes: lsquo,rsquo,ldquo,rdquo
  use_coderay: false

  coderay:
    coderay_wrap: div
    coderay_line_numbers: inline
    coderay_line_numbers_start: 1
    coderay_tab_width: 4
    coderay_bold_every: 10
    coderay_css: style

redcloth:
  hard_breaks: true

您还必须确保您希望 Jekyll 处理的每个页面都有适当的 YAML front-matter .

Any file that contains a YAML front matter block will be processed by Jekyll as a special file.

如果您没有 YAML 前端,您的插件将不会被应用。

它甚至可以是空的,比如

---
---

#haml

删除 ./_layouts/index1.haml 你不需要它。 将 index1.haml 更改为:

---
title: Index
---

!!!
%html
  %head
    %meta{charset: "utf-8"}/
    %meta{content: "initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width", name: "viewport"}/
    %title
  %body
    Test Test

并从 _config.yml 中删除 --- 行——它应该是

source:      .
destination: ./_site
plugins:     ./_plugins
layouts:     ./_layouts

据我所知,使用 Jekyll 插件,没有一种方法可以处理 .scss 文件而不需要这些文件中的 YAML front-matter。要实现这一点,除了 jekyll 处理之外,您还需要使用预处理器。我个人使用Jekyll Asset Pipeline Reborn .它易于设置,并具有一些不错的其他功能,例如缩小文件和将文件拼接在一起。

或者因为你正在使用 grunt(我假设,由于你的标签)你可以 use grunt to preprocess your .scss .

关于ruby - jekyll 观看 haml 和 sass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24075316/

有关ruby - jekyll 观看 haml 和 sass的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  4. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  5. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  6. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  7. ruby-on-rails - rails : keeping DRY with ActiveRecord models that share similar complex attributes - 2

    这似乎应该有一个直截了当的答案,但在Google上花了很多时间,所以我找不到它。这可能是缺少正确关键字的情况。在我的RoR应用程序中,我有几个模型共享一种特定类型的字符串属性,该属性具有特殊验证和其他功能。我能想到的最接近的类似示例是表示URL的字符串。这会导致模型中出现大量重复(甚至单元测试中会出现更多重复),但我不确定如何让它更DRY。我能想到几个可能的方向...按照“validates_url_format_of”插件,但这只会让验证干给这个特殊的字符串它自己的模型,但这看起来很像重溶液为这个特殊的字符串创建一个ruby​​类,但是我如何得到ActiveRecord关联这个类模型

  8. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  9. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  10. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

随机推荐