Middleman:构建后运行自定义操作

时间:2014-05-26 23:42:28

标签: ruby middleman

如何在中间人构建页面后运行自定义操作(例如,复制文件到构建文件夹)?

我想从源代码中放置Readme.md文件来构建目录。

2 个答案:

答案 0 :(得分:13)

您可以使用after_build挂钩。将以下代码添加到config.rb

您可以使用的钩子写在https://middlemanapp.com/advanced/custom_extensions/

虽然没有详细记录,但似乎after_build可以直接在config.rb中使用,而无需编写自己的扩展程序。

after_build do |builder|
  src = File.join(config[:source],"Readme.md")
  dst = File.join(config[:build_dir],"Readme.md")
  builder.thor.source_paths << File.dirname(__FILE__)
  builder.thor.copy_file(src,dst)
end

答案 1 :(得分:1)

虽然after_build挂钩是默认答案,但我建议使用任务运行器来完成这项工作。

任务运行程序非常棒,可以使这些例程更容易。例如,大多数Middleman项目都需要部署到托管服务器。因此,如果您碰巧使用任务运行器进行部署,您也可以使用它来复制文件。

如果您不使用任务运行器,请考虑使用一个。它会为你节省很多麻烦。

Rake是Middleman Ruby环境的自然选择,但我更喜欢Grunt

这是一个Grunt复制任务(使用grunt-contrib-copy插件):

copy: {
  bowercomponents: {
    files: [
      {
        expand: true,
        flatten: true,
        src: [
          'source/Readme.md'
        ],
        dest: 'build/',
        filter: 'isFile'
      }
    ]
  }
}

这是使用grunt-shell插件的部署任务:

shell: {

    buildAndPublish: {
        command: [
          'echo "### Building ###"',
          'bundle exec middleman build --verbose',

          'echo "### Adding built files to git index ###"',
          'cd build/',
          'git add -A',

          'echo "### Commiting changes ###"',
          'git commit -m build',

          'echo "### Pushing the commit to the gh-pages remote branch ###"',
          'git push origin gh-pages',
          'cd ..'
        ].join(' && '),
        options: {
          stdout: true,
          stderr: true
        }
    }

}