2016-08-15 7 views
1

リソースフォルダを含むClojureプロジェクトと、いくつかのファイルと、いくつかのWebコンテンツを保持する "public"という別のフォルダがあります。boot-clj:ファイルセットから特定のフォルダのみを抽出するタスク

私はClojureScriptをコンパイルし、パブリックディレクトリだけをグローバルファイルシステム内の別のディレクトリに移動するブートタスクを探しています。最後に、フォルダ名を "project-version"に変更する必要があります。

move-filesはファイル用であり、ディレクトリ用ではないため、以下は機能しません。しかし、私はそれがアイデアを明確だと思う:

(def project-name "My") 
(def project-version "0.1.0") 

(deftask store-web-dir [] 
    (let [dir-name (format "%s-%s" project-name project-version)] 
    (comp 
    (cljs :optimizations :advanced) 
    (move-files :files {"public" dir-name}) ;; should rename the dir public to .. 
    (copy :output-dir "/some/path/web_dirs" 
      :matching #{(re-pattern (str "^" dir-name "$"))})))) 

はこの後、プロジェクトのすべてのパブリックファイルのコンパイルされたバージョンを含むフォルダ/some/path/web_dirs/My-0.1.0、があるはずです。

+0

bootは独自のファイルシステム抽象化を使用します。ファイル処理には標準機能を使用しないでください。 'sift'タスクを見てみましょう。 –

+0

良いアドバイスは、ここに適切なツールのように見えます。 –

答えて

1

siftおよびtargetboot sift -h)が役に立ちます。

私はあなたがここで説明するものと同様のものを実行します。 https://github.com/timothypratley/voterx/blob/master/build.boot

(sift :invert true :include #{#"js/devcards.out" #"js/app\.out" #"\S+\.cljs\.edn"}) 
(target :dir #{"public"}) 

ターゲットは、特定の出力ディレクトリにファイルを置き、私はあなたがバージョンに基づいて、それを変更することができます確信しています。何かのように(str "public" +version+)

要するに、cljsビルドの外でそれを行うことはおそらくチケットです。

(deftask only-public [] 
    (comp 
    (sift :include #{#"^public"}) 
    (sift :move {#"^public/(.*)$" "$1"}))) 


(deftask store-web-dir [] 
    (comp 
    (cljs :optimizations :advanced) 
    (only-public) 
    (target :dir #{(format "/some/path/web_dirs/%s-%s" 
          project-name project-version)}))) 

機能move-filescopy、私が試したものは、前に使用したコミュニティタスク(ブートコピー&から来る:コメントと回答に触発

+0

これらの機能をどのようにテストしますか?今のところ、私はいつも関数の小さな変更ごとにClojureScript全体をコンパイルしました。ファイルセットの入力としてフォルダの内容(たとえば、最初のコンパイル後のターゲットフォルダ)を取り込むタスクがありますか? –

+0

私は、cljsがファイルセット用にビルドしたパスの下にあるリソースディレクトリにファイルを置いて、cljsタスクをコメントアウトすることができると思います。 –

+0

私は次回これを試してみましょう! –

1

、私はここにかかった道を投稿しますブートファイル)、それは組み込みのsiftのように見えますが、targetと組み合わせると、この場合にははるかに一般的で完璧です。

関連する問題