簡體   English   中英

如何阻止 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

如果directoryfile都已經存在,如何讓 Rake 不運行file任務?

您的文件任務是錯誤的。 它聲明,好像它在根目錄中創建file ,但實際上它在directory目錄中創建file Rake 檢查file存在於根目錄中,如果不存在,則運行任務。 為了使其正常工作,您需要重命名文件任務:

file "directory/file" => "directory" do
  touch "directory/file"
end

desc "Create file"
task build: "directory/file"

這樣 Rake 檢查正確的文件是否存在並且不運行“目錄/文件”任務。

** Invoke build (first_time)
** Invoke directory/file (first_time, not_needed)
** Invoke directory (first_time, not_needed)
** Execute build

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM