# ClojureScript + node + hotreload

假设你已经创建了项目,并安装了shadow-cljs相关依赖,若未完成请参考文档创建项目:https://shadow-cljs.github.io/docs/UsersGuide.html

本文示例采用shadow-cljs打包构建,详细资料参考官方文档 (opens new window)

文件目录结构

|-src
|  |-demo
|    |-script.cljs
|
|-shadow-cljs.edn

在项目根目录配置文件shadow-cljs.edn

{:source-paths ["src"]
 :builds {:script
            {:id        :script
             :target    :node-script
             :main      demo.script/main
             :output-to "target/script.js"
             ;必须配置devtools,才能开启热替换
              :devtools {:before-load-async demo.script/stop
                                :after-load demo.script/start}}}}

src/demo/script.cljs代码

(ns demo.script)

(defn main []
  (prn "hello world"))

; 如果是web服务应用,参考官方例子,应该在stop中关闭服务
(defn stop [done]
  (done))

(defn start []
  (main))
  • 确保代码stop函数能执行done
  • cd 到项目目录,执行shadow-cljs watch script,然后等待安装依赖、编译完成
  • 新开terminal,执行node target/script.js,可以看到控制台输出“hello world”
  • 修改src/demo/script.cljs保存,可以看到terminal有输出“stop”、“hello word”,说明重新执行了stop、start函数
💗 博主正处于裸辞待业状态,欢迎 商务合作 💗

相关文章

shadow-cljs项目 在 proto repl 切换namespace

按官方文档中的说明已经能正常连接proto-repl,但是repl中不能切换到源码所在的namespace,不能在开发期间执行业务代码 查看官方文档操作,下面列出简单步骤,加粗为注意事项 https://shadow-cljs.github.io/docs/UsersGuide.html#protorepl_atom 添加 proto-repl 依赖 watch启动,**并在 ...

React Hooks 的思考

前言 听说 Hooks 有一段时间了,一直没去看文档。最近终于想起这事儿,浏览一遍文档后,立即燃起了一种“兴奋感”。 这种“兴奋感”犹如当初看见“箭头函数”、“async/await”一样。 所以,即使在有很多分析文章的情况下,仍想再写一些个人的思考和感受。 [react hooks官方文档](https://reactjs.org/docs/hooks-intro.html ...

cljs中普通与瞬态数据结构性能对比

chrome 67; CPU:2.2 GHz Intel Core i7 内存:16 GB 1600 MHz DDR3 官方的例子: (defn vrange [n] (loop [i 0 v []] (if (< i n) (recur (inc i) (conj v i)) v))) (defn vrange2 [n] (loo ...