一个标准的 Ruby 项目的核心结构基本上是:
lib/
foo.rb
foo/
share/
foo/
test/
helper.rb
test_foo.rb
HISTORY.md (or CHANGELOG.md)
LICENSE.txt
README.md
foo.gemspec
很少见,share/
有时被称为data/
。它用于通用的非 ruby 文件。大多数项目不需要它,但即使他们做了很多次,一切都只是保留在 中lib/
,尽管这可能不是最佳实践。
如果使用 BDD 而不是 TDD,则test/
可能会调用该目录,但您也可能会看到是否使用了 Cucumber,或者是否使用了 QED。spec/
features/
demo/
这些天foo.gemspec
可能只是.gemspec
——尤其是如果它不是手动维护的。
如果您的项目具有命令行可执行文件,则添加:
bin/
foo
man/
foo.1
foo.1.md or foo.1.ronn
此外,大多数 Ruby 项目都有:
Gemfile
Rakefile
用于使用Gemfile
Bundler,Rakefile
用于 Rake 构建工具。但如果您想使用不同的工具,还有其他选择。
其他一些不常见的文件:
VERSION
MANIFEST
该VERSION
文件仅包含当前版本号。并且MANIFEST
(or Manifest.txt
) 包含要包含在项目包文件(例如 gem 包)中的文件列表。
您可能还会看到什么,但用法是零星的:
config/
doc/ (or docs/)
script/
log/
pkg/
task/ (or tasks/)
vendor/
web/ (or site/)
其中config/
包含各种配置文件;doc/
包含生成的文档,例如 RDoc,或有时手动维护的文档;script/
包含项目使用的 shell 脚本;log/
包含生成的项目日志,例如测试覆盖率报告;pkg/
保存生成的包文件,例如foo-1.0.0.gem
;task/
可以保存各种任务文件,例如foo.rake
或foo.watchr
; vendor/
包含其他项目的副本,例如 git 子模块;最后web/
包含项目的网站文件。
然后是一些也比较常见的工具专用文件:
.document
.gitignore
.yardopts
.travis.yml
它们是不言自明的。
最后,我要补充一点,我个人添加了一个.index
文件和一个var/
目录来构建该文件(搜索“Rubyworks Indexer”以获得更多信息)并且通常有一个work
目录,例如:
work/
NOTES.md
consider/
reference/
sandbox/
只是用于开发目的的废料场。