5

我已经创建了一个.thor脚本,以按照我喜欢的方式设置一个新的 ruby​​ 项目。我使用 Thor::Actionsdirectory命令完全从模板目录结构构建应用程序,而不是使用 heredocs 内联定义它们。脚本目录如下所示:

rubynu.thor
template/
  bin/
  lib/
    %app_name%.rb.tt
    %app_name%
  README.markdown
  .gitignore
  ...

这真的很棒,让我可以轻松地可视化和更改模板的各个部分,因为我的口味发生了变化。

但是,一旦.thor使用thor install rubynu.thor. 安装将文件的副本粘贴.thor~/.thor但忽略template/目录,因此不再找到模板。

我不想硬编码source_root路径或手动将模板目录复制到~/.thor. 是否有内置的东西可以处理与.thor文件一起安装模板?如果它们在安装时可以打包在一起,那就太好了。

如果没有,解决这个问题的最好方法是什么?肯定有系统安装了使用模板文件的任务。你是怎么做到的?我想我可以绕过thor install并将它作为一个 gem 提供(尽管这看起来有点过头了),或者硬着头皮将所有模板定义内联到一个巨大的.thor文件中(以后对结构进行更改不太愉快)。

.thor作为参考,这是我正在使用的简单文件:

class Rubynu < Thor::Group
  include Thor::Actions

  argument :app_name

  def self.source_root
    File.dirname(__FILE__)
  end

  def apply_directory_template
    directory 'template', app_name
  end
end

谢谢!

4

1 回答 1

6

如果您像这样设置.thor文件:

<my_thor_commands>/
  templates/
    bin/
    lib/
    ...
   main.thor

thor install <my_thor_command>将查找一个名为 的文件main.thor,然后将其安装在<my_thor_command>. 之后,您可以依靠:

def self.source_root
  File.dirname(__FILE__)
end

这将为您提供<my_thor_command>安装时的路径。

于 2011-12-11T01:55:09.570 回答