Quick comparison to the cljs.loader recently added to CLJS.
Things shadow-cljs
does for you:
enable-console-print!
is a config option, you do not need to call itloader/set-loaded!
will be injected for you as well
(in-ns 'cljs.analyzer) | |
(defn get-expander* [sym env] | |
(when-not (or (some? (gets env :locals sym)) ; locals hide macros | |
(and (excluded? env sym) (not (used? env sym)))) | |
(let [nstr (namespace sym)] | |
(cond | |
(some? nstr) | |
(let [ns (get-expander-ns env nstr)] | |
(when (some? ns) |
(defn my-component [props context updater] | |
(cljs.core/this-as this | |
(js/React.Component.call this props context updater) | |
;; anything else you want to set-up. use goog.object/set on this | |
this)) | |
(gobj/extend | |
(.. my-component -prototype) | |
js/React.Component.prototype) |
package shadow.build.closure; | |
import clojure.lang.*; | |
import com.google.javascript.jscomp.*; | |
import com.google.javascript.jscomp.Compiler; | |
import com.google.javascript.jscomp.parsing.parser.FeatureSet; | |
import com.google.javascript.rhino.Node; | |
import java.util.List; |
Quick comparison to the cljs.loader recently added to CLJS.
Things shadow-cljs
does for you:
enable-console-print!
is a config option, you do not need to call itloader/set-loaded!
will be injected for you as wellvar $CLJS = require("./cljs_env"); | |
require("./cljs.core.js"); | |
require("./shadow.npm.react.js"); | |
require("./shadow.npm.react_native.js"); | |
var cljs=$CLJS.cljs; | |
var shadow=$CLJS.shadow; | |
var goog=$CLJS.goog; | |
var demo=$CLJS.demo || ($CLJS.demo = {}); | |
goog.dependencies_.written["demo.app.js"] = true; |
(ns demo.mixed | |
#?(:cljs (:require-macros [demo.mixed]))) | |
;; CLJ cannot compile JS only code | |
(defn cljs-only [] | |
(js/console.log "cljs-only doesn't compile in CLJ")) | |
;; so it needs to put into a reader conditional | |
#?(:cljs |
(ns demo.macro-writing-macros) | |
(def dom-elements | |
'[h1 | |
h2]) | |
(defn gen-dom-macro [name] | |
`(defmacro ~name [p# & c#] | |
(let [kw# ~(-> name str keyword) | |
children# (into [] c#)] |
var SHADOW_IMPORT_PATH = "/Users/zilence/code/shadow-cljs/target/shadow-cljs/node-repl/dev/cljs-runtime"; | |
var SHADOW_ENV = {}; | |
try {require('source-map-support').install();} catch (e) {console.warn('no "source-map-support" (run "npm install source-map-support --save-dev" to get it)');} | |
SHADOW_ENV.CLOSURE_NO_DEPS = true; | |
SHADOW_ENV.CLOSURE_DEFINES = {"shadow.cljs.devtools.client.env.autoload":false,"shadow.cljs.devtools.client.env.proc_id":"4553d9c9-bc8b-4e6b-9a20-ed188e9ffd05","shadow.cljs.devtools.client.env.module_format":"goog","goog.LOCALE":"en","shadow.cljs.devtools.client.env.repl_host":"localhost","shadow.cljs.devtools.client.env.build_id":"node-repl","goog.DEBUG":true,"shadow.cljs.devtools.client.env.reload_with_state":false,"shadow.cljs.devtools.client.env.after_load":null,"shadow.cljs.devtools.client.env.before_load":null,"shadow.cljs.devtools.client.env.repl_port":8200,"shadow.cljs.devtools.client.env.enabled":true,"goog.TRANSPILE":"never"}; | |
var SHADOW_ROOTS = ["goog"]; |
(ns demo.a | |
(:require [demo.b :refer [defcomp]])) | |
(defcomp my-comp [x y] 1) | |
(println my-comp) |
(ns demo.browser | |
(:require ["react" :as react :refer (createElement)] | |
["react-dom" :as rdom :refer (render)] :foo) | |
(:import ["react" Component])) |