npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cljs

v1.2.0

Published

ClojureScript compiler tool

Downloads

19

Readme

NOTE: work in progress

ClojureScript starter tool

A tool to answer the following questions:

  • What would a great first run of ClojureScript look like?
  • How do we create that in the clearest and cheapest way possible?
  • Should it do everything?

Install

This installs the cljs command:

$ npm install -g cljs

* cljs is the abbreviation for ClojureScript

Basics

Using Lumo, fast experimenting is the default experience. Try the most basic things as fast as possible.

  • REPL

    $ cljs
    
    cljs.user=> (+ 1 2 3)
    6
  • Run script

    ;; my_file.cljs
    (println (+ 1 2 3))
    $ cljs my_file.cljs
    6

Use dependencies

You can pull in external libraries by specifying them in a plain config file, cljs.edn. Dependencies are automatically downloaded when running any cljs command or explicitly with cljs install.

  • Dependencies

    ;; cljs.edn
    {:dependencies
     [[markdown-clj "0.9.94"]]}
    $ cljs
    
    cljs.user=> (require '[markdown.core :refer [md->html]])
    cljs.user=> (md->html "## Hello World")
    "<h2>Hello World</h2>"
  • In Script

    ;; my_file.cljs
    (require '[markdown.core :refer [md->html]])
    
    (println (md->html "## Hello World"))
    $ cljs my_file.cljs
    <h2>Hello World</h2>

Use Namespaces

If you create a build name that points to a source directory, you can start organizing files into canonical namespaces.

  • Specify src directory

    ;; cljs.edn
    {:dependencies [...]
     :builds {:main {:src "src"}}} ;; <-- Source at "src" directory,
                                   ;;     or use ["src" ...] for multiple.
                                   ;;     (:main can be any name for the build)
  • Use namespaces

    ;; src/example/core.cljs
    (ns example.core)
    
    (defn hello []
      (println "Hello World"))
    $ cljs
    
    cljs.user=> (require 'example.core)
    cljs.user=> (in-ns 'example.core)
    example.core=> (hello)
    Hello World

Compile to JavaScript

To run your ClojureScript code without the cljs command, you can compile it to a JavaScript output file for use in a browser or elsewhere. Specify extra config for compiler:

  • Compiler config

    ;; cljs.edn
    {:cljs-version "1.9.456"  ;; <-- compiler version
     :dependencies [...]
     :builds {:main {:src "src"
                     :compiler {:output-to "main.js"}}}} ;; <-- compiler options
  • Build or watch (using the production JVM compiler)

  • Pretty errors (borrowed from Figwheel)

    ;; modify src/example/core.cljs
    (ns example.core)
    
    (defn hello)  ;; <-- make an incomplete function
    Compiling src/foo/core.cljs
    ----  Could not Analyze  src/foo/core.cljs   line:3  column:1  ----
    
      Parameter declaration missing
    
      1  (ns example.core)
      2
      3  (defn hello)
         ^--- Parameter declaration missing
    
    ----  Analysis Error : Please see src/foo/core.cljs  ----

Develop for the web

Using Figwheel, you can compile your project with a much more fluid and interactive developer experience. You get a browser-connected REPL, hot-loading of files as they change, and an in-page status display.

  • Figwheel config

    ;; cljs.edn
    {:cljs-version "1.9.456"
     :dependencies [...]
     :figwheel {...} ;; <-- optional server-level config
     :builds {:main {:src "src"
                     :figwheel ... ;; <-- optional build-level config
                     :compiler {...}}}}
  • Run Figwheel

    $ cljs figwheel main

Try the example provided in this repo:

$ cljs figwheel example

cljs.user=>

Open public/index.html, then modify src-example/example/core.cljs to see status messages on your page:

Customize build scripts

For direct access to the ClojureScript compiler API, run with a Clojure file (.clj not .cljs).
Your Clojure program will be given access to the compiler API and your config in a *cljs-config* var.

  • Custom Build

    ;; build.clj
    (require '[cljs.build.api :as b]) ;; <-- official cljs compiler api
    
    (let [{:keys [src compiler]} (-> *cljs-config* :builds :main)]
      (b/build src compiler))
  • Run

    $ cljs build.clj