如何将 markdown 作为预处理器添加到资产管道中?

How to add markdown as a preprocessor to the asset pipeline?

我在 app/assets/md/*.html.md 中有降价文件,我想用 rake assets:precompile.

进行预编译

如何设置资产管道,以便它使用降价解析器生成预期的 HTML 文件?

此外,如何将这些预编译资产直接包含在我的视图中,例如:

<div>
  <%= yield asset("my_markdown_fragment.html") %>
</div>

我已经找到了解决方案。这是我所做的:

  1. rdiscount添加到Gemfilerdiscount是Ruby的Markdown处理器):

    gem 'rdiscount'
    
  2. 使用以下内容创建文件 lib/markdown_preprocessor.rb

    require 'rdiscount'
    
    class MarkdownPreprocessor < Sprockets::Processor
      def evaluate(context, locals)
        RDiscount.new(begin;data;end).to_html
      end
    end
    
  3. MarkdownPreprocessor 添加到 config/initializers/sprockets.rb 文件中的资产管道(如果不存在则创建此文件),如下所示:

    require 'markdown_preprocessor'
    
    Rails.application.assets.register_engine('.md', MarkdownPreprocessor)
    
  4. 将以下行添加到 config/initializers/assets.rb 文件:

    Rails.application.config.assets.paths << Rails.root.join('app', 'assets', 'md')
    

现在配置完成。以下是一些其他指南和提示:

  • 将您的 Markdown 文件放入 app/assets/md/ 文件夹。

  • 您的文件扩展名以 .md 结尾,但我建议 .html.md(因为结果是 HTML 文件)。

  • 您可以在添加 .erb 扩展名时将 <%= ruby %> 插入到您的 Markdown 文件中。例如,尝试使用以下内容创建此文件 app/assets/md/hello.html.md.erb

    # Hello <%= "_World_ " * 42 %>
    
  • 您可以在您的视图和控制器中访问生成的 HTML 内容:

    Rails.application.assets[asset_path].to_s.html_safe