模块 Rake::DSL

DSL 模块提供了 taskdescnamespace 等方法。当您想在顶层作用域之外使用 rake 时,可以使用此模块。

对于您从命令行运行的 Rakefile,此模块会自动包含。

私有实例方法

desc(description) 点击切换源代码

描述下一个 rake 任务。重复的描述将被丢弃。描述会显示在使用 rake -T 命令时(显示到第一个句子)和使用 rake -D 命令时(显示完整描述)。

示例

desc "Run the Unit Tests"
task test: [:build] do
  # ... run tests
end
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 166
def desc(description) # :doc:
  Rake.application.last_description = description
end
directory(*args, &block) 点击切换源代码

声明一组文件任务,以按需创建给定的目录。

示例

directory "testdata/doc"
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 92
def directory(*args, &block) # :doc:
  args = args.flat_map { |arg| arg.is_a?(FileList) ? arg.to_a.flatten : arg }
  result = file_create(*args, &block)
  dir, _ = *Rake.application.resolve_args(args)
  dir = Rake.from_pathname(dir)
  Rake.each_dir_parent(dir) do |d|
    file_create d do |t|
      mkdir_p t.name unless File.exist?(t.name)
    end
  end
  result
end
file(*args, &block) 点击切换源代码

声明一个文件任务。

示例

 file "config.cfg" => ["config.template"] do
   open("config.cfg", "w") do |outfile|
     open("config.template") do |infile|
       while line = infile.gets
         outfile.puts line
       end
     end
   end
end
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 76
def file(*args, &block) # :doc:
  Rake::FileTask.define_task(*args, &block)
end
file_create(*args, &block) 点击切换源代码

声明一个文件创建任务。(主要用于 directory 命令)。

# File rake-13.2.1/lib/rake/dsl_definition.rb, line 82
def file_create(*args, &block)
  Rake::FileCreationTask.define_task(*args, &block)
end
import(*fns) 点击切换源代码

导入部分 Rakefile fn。导入的文件在当前文件完全加载 *之后* 加载。这允许 import 语句出现在导入文件中的任何位置,同时允许导入的文件依赖于导入文件中定义的对象。

import 语句的一个常见用途是包含包含依赖关系声明的文件。

另请参阅 –rakelibdir 命令行选项。

示例

import ".depend", "my_rules"
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 184
def import(*fns) # :doc:
  fns.each do |fn|
    Rake.application.add_import(fn)
  end
end
multitask(*args, &block) 点击切换源代码

声明一个并行执行其先决条件的任务。多任务**不**保证其先决条件会按任何特定顺序执行(当您考虑它时,这是显而易见的)

示例

multitask deploy: %w[deploy_gem deploy_rdoc]
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 113
def multitask(*args, &block) # :doc:
  Rake::MultiTask.define_task(*args, &block)
end
namespace(name=nil, &block) 点击切换源代码

创建一个新的 rake 命名空间,并使用它来评估给定的代码块。返回一个 NameSpace 对象,该对象可用于查找命名空间中定义的任务。

示例

ns = namespace "nested" do
  # the "nested:run" task
  task :run
end
task_run = ns[:run] # find :run in the given namespace.

也可以通过在任务名称中使用“:”来在命名空间中定义任务

task "nested:test" do
  # ...
end
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 136
def namespace(name=nil, &block) # :doc:
  name = name.to_s if name.kind_of?(Symbol)
  name = name.to_str if name.respond_to?(:to_str)
  unless name.kind_of?(String) || name.nil?
    raise ArgumentError, "Expected a String or Symbol for a namespace name"
  end
  Rake.application.in_namespace(name, &block)
end
rule(*args, &block) 点击切换源代码

声明自动任务的规则。

示例

rule '.o' => '.c' do |t|
  sh 'cc', '-c', '-o', t.name, t.source
end
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 152
def rule(*args, &block) # :doc:
  Rake::Task.create_rule(*args, &block)
end
task(task_name) 点击切换源代码
task(task_name: 依赖项)
task(task_name, 参数 → 依赖项)

声明一个基本任务。task_name 始终是第一个参数。如果任务名称包含“:”,则它在该命名空间中定义。

dependencies 可以是单个任务名称或任务名称的数组。argument(单个名称)或 arguments(名称数组)定义提供给任务的参数。

任务、参数和依赖项名称可以是符号或字符串。

具有单个依赖项的任务

task clobber: %w[clean] do
  rm_rf "html"
end

具有参数和依赖项的任务

task :package, [:version] => :test do |t, args|
  # ...
end

要从命令行调用此任务

$ rake package[1.2.3]
# File rake-13.2.1/lib/rake/dsl_definition.rb, line 59
def task(*args, &block) # :doc:
  Rake::Task.define_task(*args, &block)
end