Coder Social home page Coder Social logo

neuroradiology / fulcro-template Goto Github PK

View Code? Open in Web Editor NEW

This project forked from fulcrologic/fulcro-template

0.0 1.0 0.0 90 KB

A sample project that could be used as a starting point for a Fulcro 3 project.

Makefile 0.29% JavaScript 1.22% Clojure 97.61% HTML 0.88%

fulcro-template's Introduction

The Project

ℹ️
This template is in progress. It should be working, but is intended to have a lot more features.

Dependency Aliases:

You will want to enable the :dev dependency while developing this project. In IntelliJ this is in the "Clojure Deps" border tab window under "Aliases".

The main project source is in src/main.

Quick Start

This is a manual to get started with this example project. It comes with npm run scripts pre-loaded, you can find them in the package.json file.

# The shadow-cljs compiler is a dependency.
yarn install
# Of course you can use npm if you like.

#### Develop components with cljs ####
# Workspaces:

npm run client/workspaces

# Visit http://localhost:8023
# Have a look at src/workspaces and https://github.com/nubank/workspaces

#### Refreshing tests in the browser ####
# CLJS Tests:
npm run client/test
# Visit http://localhost:8022

#### full-stack development ####
# Start the cljs compiler for the main target
npm run client/main

## Start the backend process:
clojure -A:dev -J-Dguardrails.enabled=true
# The ns is defined in src/dev/user
## Start the server
user=> (start)
## After modifications of the backend code:
user=> (restart)
## visit http://localhost:3000

The shadow-cljs compile server

You can find the UI of the compile server here: http://localhost:9630 There you can kick of the compilation of the other targets.

Connect to the CLJS nREPL:

  1. Open and connect your nREPL to localhost:9000.

  2. Execute (shadow/repl :main). (you can select another target of course)

Setting Up

The shadow-cljs compiler uses all js dependencies through NPM. If you use a library that is in cljsjs you will also have to add it to your package.json.

You also cannot compile this project until you install the ones it depends on already:

$ npm install

or if you prefer yarn:

$ yarn install

Adding NPM Javascript libraries is as simple as adding them to your package.json file and requiring them! See the the Shadow-cljs User’s Guide for more information.

Development Mode

Shadow-cljs handles the client-side development build. The file src/main/app/client.cljs contains the code to start and refresh the client for hot code reload.

In general it is easiest just to run the compiler in server mode:

$ npx shadow-cljs server
INFO: XNIO version 3.3.8.Final
Nov 10, 2018 8:08:23 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.8.Final
shadow-cljs - HTTP server for :test available at http://localhost:8022
shadow-cljs - HTTP server for :workspaces available at http://localhost:8023
shadow-cljs - server version: 2.7.2
shadow-cljs - server running at http://localhost:9630
shadow-cljs - socket REPL running on port 51936
shadow-cljs - nREPL server started on port 9000
...

then navigate to the server URL (shown in this example as http://localhost:9630) and use the Builds menu to enable/disable whichever builds you want watched/running.

Shadow-cljs will also start a web server for any builds that configure one. This template configures one for workspaces, and one for tests:

See the server section below for working on the full-stack app itself.

Client REPL

The shadow-cljs compiler starts an nREPL. It is configured to start on port 9000 (in shadow-cljs.edn).

In IntelliJ: add a remote Clojure REPL configuration with host localhost and port 9000.

then:

(shadow/repl :main)

will connect you to the REPL for a specific build (NOTE: Make sure you have a browser running the result, or your REPL won’t have anything to talk to!)

If you’re using CIDER see the Shadow-cljs User’s Guide and the comments in deps.edn for more information.

The API Server

In order to work with your main application you’ll want to start your own server that can also serve your application’s API.

Start a LOCAL clj nREPL in IntelliJ (using IntelliJ’s classpath with the dev alias selected in the Clojure Deps tab), or from the command line:

$ clj -A:dev -J-Dtrace -J-Dguardrails.enabled=true
user=> (start)
user=> (stop)
...
user=> (restart) ; stop, reload server code, and go again
user=> (tools-ns/refresh) ; retry code reload if hot server reload fails

The -J-Dtrace adds a JVM argument that will enable performance tracing for Fulcro Inspect’s network tab so you can see how your resolvers and mutations are performing.

The -J-Dguardrails.enabled=true turns on guardrails instrumentation of guardrails spec’d functions, which is a wrapper of Clojure spec that makes instrumentation and production-time elision (for performance and size) much easier.

ℹ️
For real development, please use an editor that has REPL integration, like Cursive (recommended) or Spacemacs.

The URL to work on your application is then http://localhost:3000.

Hot code reload, preloads, and such are all coded into the javascript.

Preloads

There is a preload file that is used on the development build of the application app.development-preload. You can add code here that you want to execute before the application initializes in development mode.

Fulcro Inspect

Fulcro inspect will preload on the development build of the main application and workspaces. You must install the plugin in Chrome from the Chrome store (free) to access it. It will add a Fulcro Inspect tab to the developer tools pane.

Tests

Tests are in src/test. Any test namespace ending in -test will be auto-detected.

src/test
└── app
    └── sample_test.cljc          spec runnable by client and server.

You can write plain deftest in here, and it is preconfigured to support the helper macros in fulcro-spec as well.

Running tests:

Clojure Tests

Typically you’ll just run your tests using the editor of choice (e.g. Run tests in namspace in IntelliJ).

The tests are also set up to run with Kaocha at the command line for your convenience and CI tools:

$ clj -A:dev:clj-tests --watch

See the Kaocha project for more details.

Clojurescript tests

The tests can be run in any number of browsers simply by navigating to the test URL that shadow-cljs outputs.

CI support is done through the ci-test build in shadow, and via Karma.

If you start the ci-tests build in Shadow-cljs, then you can also run cljs tests in a terminal "watch mode" with:

npx karma start

Of course, this make CLJS CI easy:

npx shadow-cljs compile ci-tests
npx karma start --single-run

Running all Tests Once

There is a UNIX Makefile that includes all of the CI commands as the default target. Just run:

make

Workspaces

Workspaces is a project by Nubank that is written in Fulcro, and has great support for developing in Fulcro. It is similar to devcards but has a more powerful user interface, integration with Fulcro Inspect, and much more.

The source directory for making additions to your workspace is src/workspaces.

Any namespace ending in -ws will be auto-detected and added to your workspace!

Standalone Runnable Jar (Production, with advanced optimized client js)

See tools deps projects like Depstar. You’ll need to make a release js build, optionally pre-compile your CLJ, and package it. We will likely add a demo of this process soon.

fulcro-template's People

Contributors

abhi18av avatar awkay avatar mrebbinghaus avatar pithyless avatar wilkerlucio avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.