书接上一回,在了解cljs基本语法后并在clojurescript.net的奇特错误提示后,我们必须痛定思痛地搭建一个本地的开发环境,以便后续深入地学习cljs。
由于浏览器仅能运行js,而无法直接运行cljs,因此我们需要搭建一个预编译环境将cljs编译成js后再在浏览器中运行。预编译无非就是jvm和nodejs两个环境,但具体使用时有如下几种构建工具。
直接jvm编译
lein方案
boot方案
lumo方案
shadow-cljs方案
cljs/tool方案
其中lein和boot都是基于jvm编译环境,只是上层的构建方式有所不同,而lein除了用于构建cljs外还用于构建clj;而boot则专注于构建cljs。
lumo则是基于nodejs编译环境。
shadow-cljs则是node-jre,就是用node模块管理的jvm。
由于我们只需搭建一个刚好可用的开发环境即可,因此下面只介绍方案1。
jdk8.0+
<a href="https://github.com/clojure/clojurescript/releases/latest">clojurescript 独立jar</a>
在<code>build.clj</code>文件中输入
在<code>src/hello_world/core.cljs</code>文件中输入
在<code>index.html</code>文件中输入
现在到了最激动人心的一刻了!编译君!在shell中执行
然后打开浏览器访问index.html就可以在console中看到那句熟悉的hello world!了。
现在每次修改代码后均要编译一下,要知道启动clojure是那么的漫长,所以我新增watch.clj的配置,让它监控src文件的变化来实现自动编译吧!
然后运行
就会自动编译了,是不是舒心多了!等等,还不够。对于快速开发而言,我们还需要一个repl!
首先安装个rlwrap,后面会用到!
新增repl.clj文件
修改<code>src/hello_world/core.cljs</code>文件
然后打开浏览器访问<code>http://localhost:9000/</code>,这时浏览器访问的是index.html页面,然后我们按<code>f12</code>打开浏览器的console,那么shell中就会有我们心仪已久的repl了!
这时我们在core.cljs中追加下面代码
然后在repl中加载这个命名空间
然后再将add改成multi
然后在repl中重新加载这个命名空间
现在我们可以继续深入cljs的学习咯!!!
开发环境搭建好了,那接下来要从哪里入手呢?大家是不是对<code>(require '[cljs.repl :refer [repl]])</code>和<code>(require '[cljs.repl :as repl])</code>等有些疑惑呢?后面我们就从命名空间开始吧!(cljs/run-at (jsvm. :browser) "命名空间就这么简单")