서브 디렉토리 공개를 보유한 자원 디렉토리를 사용하는 부트 프로젝트를 설정하려고합니다. 나중에 모든 웹 관련 콘텐츠, 컴파일 된 클로저 스크립트 등을 포함해야합니다.boot-clj 프로젝트의 resources/public 디렉토리 사용
공개적으로 노출되지 않도록 리소스를 보유하려는 경우에 적합합니다.
추가 공용 디렉토리없이 그렇게하면 완벽하게 작동합니다. 추가 하위 디렉토리를 사용하려고하면 오류가 발생합니다.
{:require [{{name}}.core]
:compiler-options {:asset-path "js/main.out"}}
: main.cljs.edn이 보이는 반면
bash-4.3$ tree
└── public
├── index.html
└── js
└── main.cljs.edn
다음 build.boot에서
: 자원 디렉토리 내에서
(set-env! :resource-paths #{"resources"} ...)
...
(deftask dev
[]
(comp
(serve
:handler 'myapp.server/handler
:reload true
:port 3000)
(watch)
(reload)
(cljs-repl)
(cljs)
(target :dir #{"resources/public"})))
여기에 관련된 구성입니다
boot dev
을 호출하면 다음과 같은 현상이 발생합니다. ClojureScript는 계속 위트를 컴파일합니다 h 오류가 발생하여 프로세스가 수동으로 종료됩니다. 상대 경로와 관련된 재귀 오류처럼 보입니다.
Compiling ClojureScript...
• public/js/main.js
Writing target dir(s)...
java.util.concurrent.ExecutionException: java.nio.file.NoSuchFileException: resources/public/public/public/js/main.out/goog/deps.js
public/public/public/..
이 길어질수록 계속 확장됩니다.
어디에서이 문제를 해결할 수 있을까요?
은 자원 폴더의 구조를 고려하십시오 :
bash-4.3$ tree
└── private_file.txt
└── public
├── index.html
└── js
└── main.cljs.edn
을 그리고 build.boot에서 다음과 같은 부분
업데이트 여기
질문의 업데이트 버전입니다 :
(set-env! :resource-paths #{"resources"} ...)
(deftask dev
[]
(comp
(serve
:handler 'myapp.server/handler
:reload true
:port 3000)
(watch)
(reload)
(cljs-repl)
(cljs)
(target)))
'myapp.server/handler는 리소스/public (wrap-resource
또는 해당하는 resources
에 의해 구현 됨)의 파일 만 제공한다는 것을 알고 있습니다. 나중에 심지어는 "비공개"로 기본 설정됩니다.
boot dev
을 실행하면 전체 리소스 디렉토리가 물론 private_file.txt
을 포함하여 대상 디렉토리에서 재생됩니다. (이 의도 된 행동입니까?, 나는 파일이 상당히 클 수 있고 디스크 공간의 두 배를 소모 할 수 있음을 의미합니다)
이 시점에서 나는 main : inside의 asset-path가 어떻게 영향을 미치는지 모르겠습니다. 여기의 예제에서 나는 "js/main.out"에 그것을 유지했다. 이것은 틀릴 수도있다.
문제는 여전히 boot-cljs가 resources 디렉토리에서 대상 디렉토리로 모든 것을 전송한다는 것을 의미합니다 (끝에 동일한 이름의 작업을 사용할 때). –
이제 작동합니다. 혼란을 가져 주어서 죄송합니다. 이러한 것들은 까다 롭습니다. 자산 경로가'js' 또는'js/main.out'으로 설정 되더라도 상관 없습니다. –
지금은 해결 된 것 같습니다. –