ClojureScript

REPL 和主入口

本指南要求 ClojureScript 1.10.238 或更高版本,并假设您已熟悉 快速入门.

cljs.main 命名空间

cljs.main 命名空间提供了一些函数,这些函数允许通过 Java 的应用程序启动器工具 java 启动 ClojureScript 程序和交互式会话。

本指南也易于与任何其他支持 Clojure CLI -m 标志的 Clojure 构建工具一起使用。

例如使用 clj

clj -M -m cljs.main ...

cljs.main --help

cljs.main/main 入口点接受各种参数和标志。

  • 没有选项或参数,运行交互式读取-求值-打印循环。

  • 初始化选项

    • -co, --compile-opts edn 配置构建的选项,可以是 EDN 字符串或系统依赖的路径分隔的 EDN 文件/类路径资源列表。选项将从左到右合并。

    • -d, --output-dir path 设置要使用的输出目录。如果提供,该目录中的 cljsc_opts.edn 将用于设置 ClojureScript 编译器选项。

    • -re, --repl-env env 要使用的 REPL 环境。内置支持的值:node, browser。默认值为 browser

    • -ro, --repl-opts edn 配置 repl-env 的选项,可以是 EDN 字符串或系统依赖的路径分隔的 EDN 文件/类路径资源列表。选项将从左到右合并。

    • -t, --target name JavaScript 目标。配置环境引导,默认值为 browser。支持的值:nodenodejs, webworker, none

  • 仅适用于 --main--repl 的初始化选项

    • -e, --eval string 在字符串中求值表达式;打印非 nil 值。

    • -i, --init path 加载文件或资源。

    • -v, --verbose bool 如果为 true,将启用 ClojureScript 详细日志记录。

  • 仅适用于 --compile 的初始化选项

    • -O, --optimizations level 设置优化级别,仅在使用 --compile 主选项时有效。有效值为:none, whitespace, simple, advanced

    • -o, --output-to file 设置输出编译文件。

    • -w, --watch path 持续构建,仅在使用 --compile 主选项时有效。指定要监视的目录的系统依赖路径分隔列表。

  • 主选项

    • - 从标准输入运行脚本。

    • -c, --compile [ns] 运行编译。如果指定可选命名空间,则用作主入口点。如果随后是 --repl,则在编译完成后启动 REPL。如果随后是 --server,则在编译完成后启动一个提供当前目录的 Web 服务器。

    • -h, --help, -? 打印此帮助信息并退出。

    • -m, --main ns 使用参数调用命名空间中的 -main 函数。

    • -r, --repl 运行 REPL。

    • -s, --serve host:port 启动一个简单的 Web 服务器来提供当前目录。

    • path 从文件或资源运行脚本。

  • 对于 --main--repl

    • 进入 cljs.user 命名空间。

    • *command-line-args* 绑定到一个字符串序列,其中包含出现在任何主选项之后的命令行参数。

    • 按顺序运行所有初始化选项。

    • 调用 -main 函数或运行 REPL 或脚本(如果请求)。

初始化选项可以重复和随意混合,但必须出现在任何主选项之前。

--compile 的情况下,您可以在之后提供 --repl--serve 选项。

路径可以是文件系统中的绝对路径或相对路径,也可以是相对于类路径的路径。类路径相关的路径以 @@/ 为前缀。

用法消息中也描述了相同的內容。

Usage: java -cp cljs.jar cljs.main [init-opt*] [main-opt] [arg*]

With no options or args, runs an interactive Read-Eval-Print Loop

init options:
  -co, --compile-opts edn     Options to configure the build, can be an EDN
                              string or system-dependent path-separated list of
                              EDN files / classpath resources. Options will be
                              merged left to right.
   -d, --output-dir path      Set the output directory to use. If supplied,
                              cljsc_opts.edn in that directory will be used to
                              set ClojureScript compiler options
  -re, --repl-env env         The REPL environment to use. Built-in supported
                              values: node, browser. Defaults to browser
  -ro, --repl-opts edn        Options to configure the repl-env, can be an EDN
                              string or system-dependent path-separated list of
                              EDN files / classpath resources. Options will be
                              merged left to right.
   -t, --target name          The JavaScript target. Configures environment
                              bootstrap and defaults to browser. Supported
                              values: node or nodejs, webworker, none

init options only for --main and --repl:
   -e, --eval string          Evaluate expressions in string; print non-nil
                              values
   -i, --init path            Load a file or resource
   -v, --verbose bool         If true, will enable ClojureScript verbose logging

init options only for --compile:
   -O, --optimizations level  Set optimization level, only effective with --
                              compile main option. Valid values are: none,
                              whitespace, simple, advanced
   -o, --output-to file       Set the output compiled file
   -w, --watch paths          Continuously build, only effective with the --
                              compile main option. Specifies a system-dependent
                              path-separated list of directories to watch.

main options:
   -                          Run a script from standard input
   -c, --compile [ns]         Run a compile. If optional namespace specified,
                              use as the main entry point. If --repl follows,
                              will launch a REPL after the compile completes.
                              If --server follows, will start a web server that
                              serves the current directory after the compile
                              completes.
   -h, --help, -?             Print this help message and exit
   -m, --main ns              Call the -main function from a namespace with args
   -r, --repl                 Run a repl
   -s, --serve host:port      Start a simple web server to serve the current
                              directory
   path                       Run a script from a file or resource

For --main and --repl:

  - Enters the cljs.user namespace
  - Binds *command-line-args* to a seq of strings containing command line
    args that appear after any main option
  - Runs all init options in order
  - Calls a -main function or runs a repl or script if requested

The init options may be repeated and mixed freely, but must appear before
any main option.

In the case of --compile you may supply --repl or --serve options afterwards.

Paths may be absolute or relative in the filesystem or relative to
classpath. Classpath-relative paths have prefix of @ or @/

启动 REPL

启动 ClojureScript repl 的最简单方法是使用以下命令行与随附的 cljs.jar 一起使用。

java -cp cljs.jar cljs.main

REPL 提示符显示当前命名空间的名称,默认值为 cljs.user

使用 REPL 时,可以使用几个特殊的变量。

  • *1, *2, *3 - 保存最后三个求值表达式的结果。

  • *e - 保存最后一个异常的结果。

启动脚本

要将一个充满 ClojureScript 代码的文件作为脚本运行,请将脚本的路径作为参数传递给 cljs.main

java -cp cljs.jar cljs.main /path/to/myscript.cljs

向脚本传递参数

要向脚本传递参数,请在启动 cljs.main 时将它们作为其他参数传递。

java -cp cljs.jar cljs.main /path/to/myscript.cljs arg1 arg2 arg3

这些参数将作为字符串序列提供给您的程序,并绑定到变量 *command-line-args*

*command-line-args* => ("arg1" "arg2" "arg3")

编译源代码

要编译 ClojureScript 源代码,请通过 -c 选项将主命名空间传递给 cljs.main

java -cp src:cljs.jar cljs.main -c my-namespace.core

输出将写入通过 -d 选项指定的目录(如果未指定则为 out),或写入通过 -o 选项指定的目录。