2016-08-15 3 views
1

일부 파일이 들어있는 resources 폴더와 Clojure 프로젝트를 고려하고 일부 웹 컨텐츠를 보유하는 "public"이라는 폴더를 고려하십시오.boot-clj : 파일 세트에서 특정 폴더 만 추출하는 작업

ClojureScript를 컴파일하는 부트 작업을 찾고 공용 파일 만 글로벌 파일 시스템의 다른 디렉토리로 옮깁니다. 마지막으로 폴더 이름을 "project-"으로 바꿔야합니다.

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

sifttarget (boot 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은 훨씬 더 일반적이며이 경우 완벽합니다.