
Clojure의 풀 스택 웹 애플리케이션을위한 의견이있는 스타터 앱
Java 1.8+ 및 PostgreSQL 9.6+뿐만 아니라 부팅 설치가 필요합니다. Docker는 또한 지역 개발에 권장됩니다.
새 프로젝트를 시작하는 가장 좋은 방법은 GitHub 페이지 상단의 "이 템플릿 사용"버튼을 클릭하는 것입니다. 또는 프로젝트에 GitHub를 사용하지 않으려면 git init
개발 환경을 시작하려면 :
docker-compose up &
boot dev
이는 LocalHost : 7000에서 사이트를 호스팅하면서 백엔드 및 프론트 엔드 컴파일이 시작됩니다. API 문서는 http : // localhost : 7000/api-docs에서도 확인할 수 있습니다
Uberjar에게 프로젝트를 구축하려면 :
boot build <target-dir>
"app- (version) -stastalone.jar"라는 Uberjar는 대상 디렉토리에 있습니다. 프로젝트 버전 번호는 build.boot 에서 설정할 수 있습니다.
구성은 resources/config 디렉토리의 EDN 파일을 통해 처리됩니다. base.edn 모든 환경에 적용되는 기본 구성을 제공하는 반면 두 프로파일 인 dev.edn 및 prod.edn 해당 환경에로드되어 base.edn 보다 우선합니다. 또한로드 타임에 구성 파일은 domain.cljc 에있는 Config 스키마에 대해 확인됩니다.
Frontend 구성은 GET /api/config 에서 API를 통해 제공되며 domain.cljc 의 FrontendConfig 스키마에 정의 된대로 구성의 하위 집합을 제공합니다.
메인 백엔드 API는 api.clj 에서 찾을 수 있으며 Compojure-API로 작성됩니다. Compojure-API 구문 작업에 대한 자습서도 있습니다.
종속성 주입 및 시스템 구성 요소 처리는 시스템 및 Raamwerk 모델을 통해 처리됩니다. 이것은 백엔드의 라이브 재 장전을 가능하게하지만 앱의 모든 구성 요소 (정적 및 API 서버, 구성, DB 등)를 오케스트레이션합니다. 이들의 주요 생성자는 app.systems 에 있습니다. 구성 프로파일 이름을 가져 와서 해당 프로파일의 기본 시스템 맵을 생성 한 다음 PROD 및 DEV 시스템을 생성하는 기능을 제공하는 기본 build-system 기능이 있습니다.
가장 중요한 참고 사항은 다음과 같습니다 :site-endpoint 는 메인 인덱스와 같은 정적 경로를 처리하고 app.routes/site 를 가리키는 구성 요소입니다 :api-endpoint 은 나머지 API의 구성 요소이며 app.api/api-routes 를 가리 킵니다. 이러한 각 함수는 단일 인수 ( sys By Convention)를 취하며, 이는 시스템 맵의 하위 집합이며, 벡터의 종속성으로 나열된 키를 component/using 으로 전달합니다. 따라서 구성 요소를 엔드 포인트로 사용할 수 있으려면이 벡터에 키를 추가해야합니다.
데이터베이스 마이그레이션은 래그 타임 구성 요소로 처리되며 서버 시작 또는 다시로드에서 자동으로 실행되도록 구성됩니다. 마이그레이션은 래그 타임 문서에 설명 된 체계에 따라 마이그레이션을위한 .up.sql 및 .down.sql 파일을 포함하는 resources/db/migrations 에 있습니다. 래그 타임 구성 맵은 시스템 맵에서 다음과 같이 사용할 수 있으므로 :migrations 으로 사용할 수 있으므로 REPL 또는 종속성으로 상속하는 구성 요소에서 액세스 할 수 있습니다. 이 맵은 마이그레이션을 수동으로 실행하거나 롤백하기 위해 ragtime.repl 의 함수로 전달 될 수 있습니다.
SQL 추상화의 경우 honeysql은 clojure.java.jdbc 위에 사용됩니다. HoneySQL은 SQL 쿼리를 맵으로 작성하는 방법을 제공하며, 따라서 다른 Clojure 맵으로 구축 및 구성된 다음 JDBC 드라이버와 함께 호출하기 위해 SQL로 포맷 할 수 있습니다. query.sql 에 JDBC 드라이버로 호출을 줄이려면 helper function, app.query/make-query 제공되므로 결과를 얻으려면 시스템 맵과 SQL 쿼리 맵 만 제공하면됩니다.
프론트 엔드는 각보기 렌더링을위한 다중 메모드 디스패치의 조합과 BIDE와의 클라이언트 측 라우팅을 사용하여 시약으로 구축됩니다. 따라서 새 하위 뷰를 추가하려면 기억해야 할 몇 가지 단계가 필요합니다.
app.views 네임 스페이스 (IE)에서보기를 만듭니다. cljs/app/views/foo.cljs 의 app.views.fooapp.views.dispatch/dispatch-view multimethod를 필요로하고 적절한 키에서 파견하기 위해 자신만의 멀티 메모드를 작성하십시오. :app.foo . 이 메소드는 두 가지 인수를 가져와야하며 첫 번째는 키 자체이고 두 번째는 URI의 매개 변수입니다.index.cljs 에 새 네임 스페이스가 필요합니다.router.cljs 의 경로에 경로를 추가하십시오. 주요 앱 상태는 app.state/app-state 의 공유 시약 원자에 보관됩니다. app.api 네임 스페이스도 일반적인 API 호출을 위해 제공됩니다.
라우팅과 관련된 중요한 메모 : 앱 내 다른 구성 요소에 연결하는 경우 app.router/app-link 기능을 라우팅 시스템에 고리 할 때 사용하는 것이 가장 좋습니다. 일반적인 hrefs는 작동하지만 페이지 재 장전을 강제로 강제로 앱 상태를 재설정합니다.
프론트 엔드 및 백엔드 외에도 src/cljc/app 의 .cljc 파일을 통한 일부 일반적인 네임 스페이스가 포함되어있어 주요 데이터 및 기능을 앞뒤로 공유 할 수 있습니다. 이 중 가장 중요한 것은 src/cljc/app/domain.cljc 의 app.domain 입니다. 이는 구성 파일의 스키마를 포함하여 응용 프로그램의 공통 데이터 스키마를 제공합니다.
Docker-Compose.yml은 간단한 docker-compose up 과 함께 위에서 설명한 기본 설정으로 기본 Postgres 구성을 시작하기 위해 제공되었습니다.
기본 구성은 포트 6809의 프론트 엔드에 NREPL 연결을, 포트 6502에서 백엔드를 열어줍니다.
또한 DEV 모드의 페이지에 추가 된 추가 시약 DEV-TOOL 요소도 현재 앱 상태에 반사됩니다.
SRC 디렉토리의 모든 파일에서 CLJFMT를 실행하는 boot cljfmt 작업이 제공됩니다. boot-cljfmt의 check 및 fix 작업도 직접 사용할 수 있으며 필요에 따라 개별 파일 또는 디렉토리에 대해 실행하는 데 사용할 수 있습니다.
Frontend 및 백엔드 코드는 파일 변경을 자동으로 다시로드하도록 구성되었습니다. 재 구축이 완료되면 알려주는 유용한 오디오 큐가 있습니다.
전체 백엔드 서버 시스템은 특정 파일이 변경 될 때만 완전히 다시 시작됩니다. 다음은 :files 매개 변수를 system 단계로 구성하여 build.boot Dev 작업을 통해 구성됩니다.
일부 기본 통합 테스트가 제공되었습니다. boot test 또는 boot test-watch 로 실행할 수 있으며, 이는 파일 변경시 감시자를 시작하고 모든 테스트를 실행할 수 있습니다.
테스트에는 Etaoin을 통한 브라우저 테스트가 포함되며 Firefox 기반 geckowebdriver 도 설치해야합니다. 이 작업을 수행하는 방법에 대한 정보 및 링크는 여기에서 찾을 수 있습니다. Mac에서는 brew install geckodriver , firefox-geckowebdriver 가있는 Ubuntu 또는 scoop install geckodriver 있는 Windows에 설치할 수 있습니다. 물론 크롬이 필요합니다.
이 앱은 원래 Tenzing의 추가 지침이있는 System-Template를 기반으로합니다.
Annaia Danvers (@jarcane)가 개발했습니다. Futurice가 가능하게하는 개발.
저작권 (C) 2018 Annaia Danvers. 이 코드는 Eclipse Public License v2.0 또는 이후 버전에 따라 배포됩니다. 자세한 내용은 루트 디렉토리의 LICENSE 참조하십시오.