如何阻止 Rake 不必要地执行具有依赖项的文件任务?
How to stop Rake from unnecessarily executing file tasks with dependencies?
Rake 中的文件任务只应在其命名的文件尚不存在时执行。
我有一个构建 directory
的文件任务和一个在该目录中创建 file
的文件任务。现在除非目录存在,否则无法创建文件,所以我将目录任务设置为文件任务的依赖项:
file "directory" do
mkdir_p "directory"
end
file "file" => "directory" do
touch "directory/file"
end
desc "Create file"
task build: "file"
当我在这里首先 运行 build
任务时,一切都按计划进行:首先创建目录,然后创建文件:
$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time)
** Execute directory
mkdir -p directory
** Execute file
touch directory/file
** Execute build
当我在创建文件及其包含目录后第二次 运行 时,我希望 Rake 什么都不做 (not_needed
),因为所有文件都是文件任务与已经存在相关。相反,目录任务被跳过但文件任务被执行:
$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time, not_needed)
** Execute file
touch directory/file
** Execute build
如果 directory
和 file
都已经存在,我怎样才能让 Rake 不是 运行 file
任务?
您的 file 任务有误。它声明,就好像它在根目录中创建了 file
,但实际上它在 directory
目录中创建了 file
。 Rake 检查 file
是否存在于根目录中,如果不存在,则 运行 是任务。为了使其正常工作,您需要重命名 file task:
file "directory/file" => "directory" do
touch "directory/file"
end
desc "Create file"
task build: "directory/file"
这样 Rake 会检查正确的文件是否存在,而不是 运行 'directory/file' 任务。
** Invoke build (first_time)
** Invoke directory/file (first_time, not_needed)
** Invoke directory (first_time, not_needed)
** Execute build
Rake 中的文件任务只应在其命名的文件尚不存在时执行。
我有一个构建 directory
的文件任务和一个在该目录中创建 file
的文件任务。现在除非目录存在,否则无法创建文件,所以我将目录任务设置为文件任务的依赖项:
file "directory" do
mkdir_p "directory"
end
file "file" => "directory" do
touch "directory/file"
end
desc "Create file"
task build: "file"
当我在这里首先 运行 build
任务时,一切都按计划进行:首先创建目录,然后创建文件:
$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time)
** Execute directory
mkdir -p directory
** Execute file
touch directory/file
** Execute build
当我在创建文件及其包含目录后第二次 运行 时,我希望 Rake 什么都不做 (not_needed
),因为所有文件都是文件任务与已经存在相关。相反,目录任务被跳过但文件任务被执行:
$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time, not_needed)
** Execute file
touch directory/file
** Execute build
如果 directory
和 file
都已经存在,我怎样才能让 Rake 不是 运行 file
任务?
您的 file 任务有误。它声明,就好像它在根目录中创建了 file
,但实际上它在 directory
目录中创建了 file
。 Rake 检查 file
是否存在于根目录中,如果不存在,则 运行 是任务。为了使其正常工作,您需要重命名 file task:
file "directory/file" => "directory" do
touch "directory/file"
end
desc "Create file"
task build: "directory/file"
这样 Rake 会检查正确的文件是否存在,而不是 运行 'directory/file' 任务。
** Invoke build (first_time)
** Invoke directory/file (first_time, not_needed)
** Invoke directory (first_time, not_needed)
** Execute build