
ClojureのフルスタックWebアプリケーション用の意見のあるスターターアプリ
Java 1.8+、およびPostgreSQL 9.6+だけでなく、ブートをインストールする必要があります。 Dockerは、現地開発にも推奨されています。
新しいプロジェクトを開始する最良の方法は、GitHubページの上部にある「このテンプレートを使用」ボタンをクリックするだけです。あるいは、プロジェクトにGitHubを使用したくない場合は、Master .Zipをダウンロードし、ローカルで抽出し、 git initそこから抽出できます。
開発環境を開始するには:
docker-compose up &
boot dev
これにより、バックエンドとフロントエンドの両方のコンピレーションが開始され、サイトはLocalHost:7000でホストされます。 APIドキュメントは、http:// localhost:7000/api-docsにもあります
プロジェクトをUberjarに構築するには:
boot build <target-dir>
「app-(version)-standalone.jar」と呼ばれるuberjarがターゲットディレクトリにあります。プロジェクトバージョン番号は、 build.bootで設定できます。
構成はresources/configディレクトリの下でEDNファイルを介して処理されます。 base.edn 、すべての環境に適用されるベース構成を提供し、2つのプロファイル、 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にあります。構成プロファイル名を取得し、そのプロファイルのベースbuild-systemマップを生成するベースビルドシステム関数があり、次にPRODおよびDEVシステムを生成する関数があります。
最も重要なメモは:site-endpointです。これは、メインインデックスなどの静的ルートを処理し、 app.routes/siteを指すコンポーネント、および:api-endpointは、 app.api/api-routesを指します。これらの各関数は、システムマップのサブセットである単一の引数( sysと呼ばれます)を採用します。これは、 component/usingに渡されたベクトルの依存関係としてリストされているキーを含みます。したがって、コンポーネントをエンドポイントで利用できるようにするには、このベクトルにそのキーを追加する必要があります。
データベースの移行は、サーバーの起動またはリロードで自動的に実行されるように構成されているRagtimeコンポーネントで処理されます。移行は、Ragtimeドキュメントに記載されているスキームに従って指定された、 .up.sqlおよび.down.sqlファイルを移行用に含むresources/db/migrationsにあります。 Ragtime Config Mapは、システムマップとして使用できます:migrationsため、REPLまたは依存関係として継承するコンポーネントからアクセスできます。このマップは、 ragtime.replの関数に渡すことができます。
SQL抽象化の場合、honeysqlはClojure.java.jdbcの上で使用されます。 HoneysQlは、SQLクエリをマップとして書き込む方法を提供します。これは、他のClojureマップとして構築および構成することができ、SQLにフォーマットしてJDBCドライバーと呼びます。ヘルパー関数、 app.query/make-queryはquery.sqlでJDBCドライバーへの呼び出しをラッピングするために提供されるため、結果を得るにはシステムマップとSQLクエリマップのみを提供する必要があります。
フロントエンドは試薬で構築されており、各ビューをレンダリングするためにマルチメトッドディスパッチの組み合わせと、Bideとのクライアント側のルーティングを使用して構築されています。そのため、新しいサブビューを追加するには、覚えておくことが重要ないくつかのステップが必要です。
app.views namespace、つまり、ビューを作成します。 app.views.foo in cljs/app/views/foo.cljsapp.views.dispatch/dispatch-view multimethodを必要とし、適切なキー、すなわち、独自のマルチメソッドを作成します。 :app.foo 。メソッドは2つの引数を取得する必要があります。1つ目はキー自体、2つ目はURIの任意のパラメーターです。index.cljsの新しい名前空間が必要です。router.cljsのルートへのルートを追加します。メインアプリ状態は、 app.state/app-stateの共有試薬原子に保持されます。 app.api名前空間も、一般的なAPI呼び出し用に提供されています。
ルーティングに関する重要なメモ:アプリ内の別のコンポーネントにリンクする場合、このフックをルーティングシステムにフックすると、 app.router/app-link関数を使用することが最善です。通常のHREFは機能しますが、ページリロードを強制します。これは遅くなり、アプリステートをリセットします。
フロントエンドとバックエンドに加えて、 src/cljc/appの.cljcファイルを介していくつかの一般的な名前空間も含まれています。これにより、主要なデータと機能をフロントとバックで共有できます。これらの中で最も重要なのはsrc/cljc/app/domain.cljcのapp.domainです。これにより、構成ファイルのスキーマを含む、アプリケーションの一般的なデータスキーマが提供されます。
docker-compose.ymlが提供されており、上記のデフォルト設定を使用して、単純なdocker-compose upを使用して、基本的なPostgres構成を起動しています。
デフォルトの構成は、ポート6809のフロントエンドとポート6502のバックエンドの両方へのNREPL接続を開きます。
また、現在のアプリ状態に反射を提供する追加のReagent-Dev-Tools要素がDEVモードのページに追加されています。
SRCディレクトリ内のすべてのファイルでCLJFMTを実行するboot cljfmtタスクが提供されます。 Boot-Cljfmtからのcheckおよびfixタスクも直接利用可能であり、必要に応じて個々のファイルまたはディレクトリに対して実行するために使用できます。
フロントエンドコードとバックエンドコードの両方が、ファイルの変更で自動的にリロードするように構成されています。再構築が完了したら、通知するための有用なオーディオキューもあります。
完全なバックエンドサーバーシステムは、特定のファイルが変更された場合にのみ完全に再起動されることに注意してください。これは、 build.boot devタスクを介して構成されます: systemステップへの:filesパラメーター。
いくつかの基本的な統合テストが提供されています。 boot testまたはboot test-watchでこれらを実行できます。これにより、ウォッチャーを起動し、ファイルの変更ですべてのテストを実行できます。
テストには、エタオインを介したブラウザテストが含まれており、Firefoxベースのgeckowebdriverもインストールする必要があります。これを行う方法に関する情報とリンクは、ここにあります。 Macでは、 brew install geckodriver 、Ubuntuでfirefox-geckowebdriver 、またはscoop install geckodriverを使用してインストールできます。もちろん、クロムが必要になります。
このアプリは、もともとシステムテンプレートに基づいており、Tenzingからのさらなるガイダンスがあります。
Annaia Danvers(@jarcane)によって開発されました。 Futuriceによって可能になった開発。
Copyright(c)2018 Annaia Danvers。コードは、Eclipse Public License v2.0または後のバージョンの下で配布されます。詳細については、ルートディレクトリのLICENSE参照してください。