ClojureScript

編譯器選項

常用選項

:asset-path

當使用 :main 時,通常需要控制進入點腳本嘗試從哪裡載入腳本,這取決於網頁伺服器的組態。:asset-path 是相對 URL 路徑,而不是檔案系統路徑。例如,如果您的輸出目錄是 :output-dir "resources/public/js/compiled/out",但您的網頁伺服器是從 "resources/public" 提供檔案,那麼您會希望進入點腳本從 "js/compiled/out" 載入腳本。

:asset-path "js/compiled/out"

:bundle-cmd

當使用 :target :bundle 時,設定在建置後執行的 shell 命令。此命令不可參數化。您應提供在開發建置後執行的 :none,以及在通過 Closure Compiler 後執行的 :default。命令應為會結束的命令,也就是說,您不能用它來啟動監看器。

:bundle-cmd {:none ["npx" "webpack" "--mode=development"]
             :default ["npx" "webpack"]}

:checked-arrays

如果設定為 :warn:error,則會檢查傳遞給 agetaset 的推斷類型和執行階段值。推斷類型不符將會觸發 :invalid-array-access 警告。如果設定為 :warn,則會在傳遞不正確的值時記錄;如果設定為 :error,則會拋出例外。可以設定為假值以停用此功能。

如果 :optimizations 設定為 :advanced,則此設定不適用。

:checked-arrays :warn

:externs

設定外部函式庫的 externs 檔案。會在目前的工作目錄和類別路徑中搜尋這些檔案。

對於此選項以及以下選項,您可以在以下網址找到非常好的說明:http://lukevanderhart.com/2011/09/30/using-javascript-and-clojurescript.html

預設為空向量 []

:externs ["jquery-externs.js"]

:foreign-libs

新增對外部函式庫的相依性。請務必讓 URL 傳回 HTTP 代碼 200。

預設為空向量 []

:foreign-libs [{ :file "http://example.com/remote.js"
                 :provides  ["my.example"]
                 :global-exports '{my.example MyExample}}
               { :file "./resources/js/local.js"
                 :provides ["my.other.example"]}
               { :file "./path/to/directory/"
                 ;; :provides will be automatically generated based on
                 ;; each .js filename. E.g: your.dep.js file will
                 ;; provides ["your.dep"]. Custom defined :provides in
                 ;; this case will be overwritten.
                }]

:foreign-libs 向量中的每個元素都應該是一個對應,其中的索引鍵具有以下語意

  • :file 表示函式庫的 URL。這可以是本機路徑,也可以是相依性檔案的遠端 URL。如果本機路徑是目錄而非檔案,編譯器將會遞迴搜尋目錄中的所有 .js 檔案,並根據 .js 檔案名稱自動指派 :provides 值。例如:your.js.deps.js 會產生計算的 :provides ["your.js.deps"],而您的自訂 :provides 將會被產生的 :provides 覆寫。

  • :file-min (選用) 表示函式庫的最小化變體的 URL。如果 :optimizations 設定為 :simple:advanced,則會優先使用此值,而非 :file

  • :provides 與函式庫相關聯的合成命名空間。這通常是一個包含單一字串的向量,但它能夠指定多個命名空間 (通常僅由 Google Closure 函式庫使用)。

  • :requires (選用) 明確識別相依性 (來自其他外部函式庫的 :provides 值) 的向量;用於形成依賴關係的拓樸排序。

  • :module-type (選用) 表示外部函式庫使用給定的模組系統。可以是 :commonjs:amd:es6 其中之一。請注意,如果提供,則不會使用 :requires (因為它是隱含決定的)。如需更多資訊,請參閱JavaScript 模組支援 (Alpha)

  • :preprocess (選用) 用於預處理/轉換其他方言 (JSX 等) 中的程式碼。值可以是符號或關鍵字。如果提供符號,則它應解析為接受兩個參數的函式:js-module 和選項對應。如果符號參照的命名空間尚未載入,編譯器將會需要該命名空間。如果值是關鍵字,則它會作為 cljs.clojure/js-transforms 多重方法的分派值使用。如需更多資訊,請參閱JavaScript 函式庫預處理

  • :global-exports (選用) 用於將提供的命名空間對應到全域匯出的值。索引鍵可以是符號或字串。如果存在,則當需要時,可以使用慣用的外部函式庫,即支援 :refer:rename:as 等。

:global-goog-object&array

預設為 false。如果為 true,則會將 goog.objectgoog.array 載入為全域命名空間,而不是作為 goog.module 命名空間。

:install-deps

如果為 true,則會自動安裝所有宣告的 :npm-deps,包括在上游相依性中宣告的相依性。

:main

指定進入點命名空間。當與最佳化層級 :none 組合使用時,:main 會導致編譯器發出單一 JavaScript 檔案,該檔案會匯入 goog/base.js、命名空間的 JavaScript 檔案,並發出必要的 goog.require 陳述式。這允許在開發和生產之間保留相同的 HTML 標記。

通常以符號的形式提供。在 EDN 組態檔中,您不需要引用符號。

:main foo.bar

:main 也可以字串的形式提供,但前者是較佳的做法。

:main "foo.bar"

另請參閱 :asset-path

注意:這會導致將 main 命名空間,以及所有 :require 的命名空間的可傳遞閉包載入到您的 JavaScript 環境中。如果您有其他不需要載入的未參照命名空間,請考慮 :require 它們,或透過發出適當的額外 goog.require 陳述式手動載入它們。

:modules

用於發出 Google Closure 模組的新選項。Closure 模組支援將最佳化建置分割成 N 個不同的模組。如果提供 :modules,則會取代單一的 :output-to。模組需要名稱、個別的 :output-to 檔案路徑、:entries (一組命名空間) 和 :depends-on (模組相依的一組模組)。範例如下

{:optimizations :advanced
 :source-map true
 :output-dir "resources/public/js"
 :modules {
   :common
     {:output-to "resources/public/js/common.js"
      :entries #{"com.foo.common"}}
   :landing
     {:output-to "resources/public/js/landing.js"
      :entries #{"com.foo.landing"}
      :depends-on #{:common}}
   :editor
     {:output-to "resources/public/js/editor.js"
      :entries #{"com.foo.editor"}
      :depends-on #{:common}}}}

不在 :entries 集合中的任何命名空間都將移至預設模組 :cljs-base。然而,由於跨模組程式碼移動,Google Closure 可以將函式和方法移動到實際使用的模組中。此過程有些保守,因此如果您知道想要將某些程式碼保留在一起,請透過 :entries 來執行。

:cljs-base 模組預設會寫入到 :output-dir,名稱為 "cljs_base.js"。可以透過指定描述 *僅* :output-to:cljs-base 模組來覆寫此預設值。

請仔細注意,命名空間在所有模組 :entries 中只能出現一次。

:modules 完全支援 :foreign-libs:foreign-libs 一律會在任何 Google Closure 編譯的來源程式碼之前依賴順序放置。

完全支援來源對應,每個模組都會建立一個單獨的來源對應。只需提供 :source-map true (請參閱範例),因為沒有單一來源對應可命名。

:npm-deps

控制 NPM 相依性。NPM 套件名稱 (關鍵字或字串) 與所需版本,或布林值的對應。如果設定為真值,則會建立索引並使用 node_modules 目錄。預設為 false。(在 ClojureScript 1.10.339 和更早版本中,預設為 true。)另請參閱 :install-deps

:npm-deps 功能在最佳化建置中處於 alpha 狀態。當套用 Closure 最佳化時,NPM 相依性會通過 Closure Compiler,並非所有 NPM 函式庫都包含與 Closure 相容的程式碼。

您可以在搭配 Webpack 的 ClojureScript 中找到可靠的替代方案。

:npm-deps {"lodash" "4.17.4"}

:optimizations

最佳化層級。可以是 :none:whitespace:simple:advanced。僅支援針對啟動的 ClojureScript 使用 :none:simple

:none 是建議的開發設定,而 :advanced 是建議的生產設定,除非有某些因素阻止 (不相容的外部函式庫、錯誤等)。

如需有關不同最佳化模式的詳細說明,請參閱Closure Compiler 編譯層級

node.js externs 也可作為有用的範例。

當未使用:main 選項時,:none 需要手動載入程式碼,因此需要與其他選項不同的 HTML。

預設為 :none

:optimizations :none

:output-to

將輸出的 JavaScript 檔案路徑。

:output-to "resources/public/js/main.js"

:output-dir

設定編譯期間使用的暫存檔的輸出目錄。預設為 "out"。

:output-dir "resources/public/js/out"

:preloads

開發 ClojureScript 通常需要僅在開發時間產生的副作用,例如啟用列印、記錄和連線 REPL。:preloads 允許在 cljs.core 之後立即載入這類副作用的樣板。例如,您可以建立用於在瀏覽器中啟用列印的開發命名空間

(ns foo.dev)

(enable-console-print!)

現在,您可以使用下列編譯器選項來設定開發建置,以在主要命名空間之前載入此副作用

{:preloads '[foo.dev]
 :main 'foo.core
 :output-dir "out"}

:preloads 必須是符號序列,對應到類別路徑上可探索的現有命名空間。請注意,當使用 Leiningen 時,不需要前導引號 - project.clj 中的值會隱含地引用。

對於 :optimizations :none,必須指定 :main 選項才能讓預先載入正常運作。

:pretty-print

決定是否將 JavaScript 輸出以人類可讀的方式排版。預設為 false

:pretty-print false

:source-map

請參閱 Source-maps。在 :none 優化設定下,有效值為 truefalse,預設值為 true。在所有其他優化設定下,必須指定要寫入來源對應的路徑。

:none 設定下

:source-map false

否則

:source-map "path/to/source/map.js.map"

:stable-names

確保在進階建置之間減少名稱變動,如果您使用 :modules,則能進行適當的供應商化。

:stable-names true

:target

有效選項為 :nodejs:webworker:bundle:none

預設值(未指定 :target)表示目標為瀏覽器。

請參考這裡,以取得如何在 nodejs 中執行程式碼的更多資訊。

:webworker 會產生適合使用 Web Workers 載入的引導腳本。

:bundle 目標是為了支援 node_modules 中的依賴項。ClojureScript 產生的輸出需要傳遞給其他 JavaScript 工具(例如 Webpack、Metro),才能處理為這些依賴項產生的 Node.js 樣式 require 導入。

:none 目標會產生不依賴任何特定執行環境的輸出。

:target :nodejs

:verbose

發出來自編譯器活動的詳細資訊和測量結果。

:verbose true

較不常用的選項

:anon-fn-naming-policy

Google Closure 編譯器如何命名在賦值和變數宣告中作為右值出現的匿名函數的策略。預設為 :off

:anon-fn-naming-policy :unmapped

支援以下值

  • :off 不給匿名函數命名。

  • :unmapped 產生基於賦值左側的名稱。在變數和屬性重新命名後執行,以便產生的名稱簡短且混淆處理。

  • :mapped 產生簡短的唯一名稱,並提供從這些名稱到基於賦值左側的更有意義名稱的對應。

:aot-cache

如果透過 cljs.main 使用 ClojureScript,則預設為 true,否則或如果 ClojureScript 被用作 git 依賴項,則預設為 false。控制是否將共享 AOT 快取用於從 JAR 產生的編譯器成品。

:aot-cache true

:browser-repl

自動注入標準瀏覽器 REPL 所需的元件。啟動瀏覽器 REPL 時,此選項預設為 true。

:browser-repl true

:cache-analysis

實驗性功能。將編譯器分析快取到磁碟。這可以加快冷建置和 REPL 啟動時間。

對於 REPL,預設為 true。否則,當且僅當 :optimizations:none 時,預設為 true

:cache-analysis true

:closure-defines

設定使用 @definecljs.core/goog-define 輔助巨集註釋的 Closure 函式庫變數的值。常見的用法是將 goog.DEBUG 設定為 false

:closure-defines {"goog.DEBUG" false}

您也可以使用符號

:closure-defines {my.cool-ns/some-def true}

請注意,當使用 Lein 時,由於隱含的引用,因此不需要引號。

對於 :optimizations :none,必須指定 :main 選項才能使定義生效,並且只有 goog-define 定義會受到影響。:closure-defines 目前對 :optimizations :whitespace 沒有任何影響。

您可以使用在 :closure-defines 中設定的變數,在編譯時消除程式碼的部分 (DCE)。但是,要做到這一點,您必須將 ifcondidentical? 比較結合使用。任何其他形式(例如 casecondp)在執行時都可以正常工作,但是 javascript 輸出將包含無效的程式碼分支。

例如,如果您想要建立僅包含與語言環境相關的翻譯訊息的應用程式本地化版本

(def messages
  (cond
    (identical? js/goog.LOCALE "nl") i18n.nl/messages
    (identical? js/goog.LOCALE "fr") i18n.fr/messages
    :else i18n.en/messages))

:closure-extra-annotations

定義 Closure 函式庫可能使用的額外 JSDoc 註釋,以便它們不會觸發編譯器警告。

:closure-extra-annotations #{"api"}

:closure-output-charset

設定輸出字元集。可以是

  • iso-8859-1

  • us-ascii

  • utf-16

  • utf-16be

  • utf-16le

  • utf-8

預設為 utf-8

:closure-output-charset "iso-8859-1"

:closure-warnings

設定 Closure 編譯器產生的警告。從 Closure 警告到設定值的對應,僅支援 :error:warning:off

:closure-warnings {:externs-validation :off}

以下 Closure 警告選項公開給 ClojureScript

:access-controls
:analyzer-checks
:check-regexp
:check-types
:check-useless-code
:check-variables
:closure-dep-method-usage-checks
:conformance-violations
:const
:constant-property
:debugger-statement-present
:deprecated
:deprecated-annotations
:duplicate-message
:duplicate-vars
:es5-strict
:externs-validation
:extra-require
:function-params
:global-this
:invalid-casts
:j2cl-checks
:jsdoc-missing-type
:late-provide
:lint-checks
:message-descriptions
:misplaced-msg-annotation
:misplaced-type-annotation
:missing-getcssname
:missing-override
:missing-polyfill
:missing-properties
:missing-provide
:missing-require
:missing-return
:missing-sources-warnings
:module-load
:msg-conventions
:non-standard-jsdoc
:report-unknown-types
:strict-missing-properties
:strict-missing-require
:strict-module-dep-check
:strict-requires
:suspicious-code
:too-many-type-params
:tweaks
:type-invalidation
:undefined-variables
:underscore
:unknown-defines
:unnecessary-escape
:unused-local-variable
:unused-private-property
:use-of-goog-base
:violated-module-dep
:visiblity

請參閱 Closure Compiler 警告 wiki 以取得詳細說明。

:compiler-stats

報告有關編譯器活動的基本計時測量。

預設為 false

:compiler-stats true

:deps-cmd

設定安裝 node_modules 的指令。僅支援 "npm""yarn"

:deps-cmd "yarn"

:elide-asserts

此旗標會導致在編譯期間移除所有 (assert *x* ) 呼叫,包括與 :pre:post 條件相關的隱式 assert。對生產環境很有用。即使在進階編譯中,預設值也始終為 false。不指定 goog.asserts.ENABLE_ASSERTS,這與 Closure 函式庫所使用的不同。

請注意,對於 JVM ClojureScript,無法在執行時動態將 *assert* 設定為 false;必須明確使用此編譯器旗標才能實現省略。另一方面,對於自託管 ClojureScript,設定 *assert* 將導致如 Clojure 中一樣省略 asserts

:elide-strict

是否省略 JavaScript 輸出中的 use strict 陳述式。預設為 true

:elide-strict false

:fingerprint

預設為 false。是否啟用指紋辨識,這會將內容 SHA 附加到輸出檔案名稱。會為對應指紋辨識檔案名稱在 :output-dir 中產生 manifest.edn。當使用 :modules:source-map 選項時,這特別有用,因為指紋辨識檔案名稱將會被適當地引用。

:fingerprint true

:fn-invoke-direct

需要 :static-fns true。此選項會發出稍微不同的程式碼,可以將程式碼速度提高約 10-30%。不實作 IFn 協定的高階函式通常會使用 f.call(null, arg0, arg1 …​) 呼叫。啟用此選項後,編譯器會使用更快的 f(arg0, arg1 …​) 呼叫它們。

:fn-invoke-direct 功能處於 Alpha 狀態。對於某些函式庫(例如 Reagent),已知 :fn-invoke-direct 會產生不正確的程式碼。

:fn-invoke-direct true
:elide-asserts true

:hashbang

當使用 :target :nodejs 時,編譯器會發出 shebang 作為編譯來源的第一行,使其可執行。當您的意圖是建置一個 node.js 模組而不是可執行檔時,請使用此選項移除 shebang。

:hashbang false

:infer-externs

啟用自動為 JavaScript 的互通呼叫產生 externs。預設為 false。如需更多資訊,請參閱 Externs (Alpha)

:infer-externs true

:language-in 和 :language-out

設定 Closure 函式庫的輸入和輸出語言。可以是

  • :ecmascript-next:es-next 相同

  • :ecmascript-2021:es-2021 相同

  • :ecmascript-2020:es-2020 相同

  • :ecmascript-2019:es-2019 相同

  • :ecmascript-2018:es-2018 相同

  • :ecmascript-2017:es-2017 相同

  • :ecmascript-2016:es-2016 相同

  • :ecmascript-2015:es-2015 相同

  • :ecmascript6:es6 相同

  • :ecmascript6-strict:es6-strict 相同

  • :ecmascript5:es5 相同

  • :ecmascript5-strict:es5-strict 相同

  • :ecmascript3:es3 相同

  • :no-transpile

:language-in 預設為 :ecmascript5:language-out 預設為 :no-transpile

:language-in  :ecmascript5
:language-out :no-transpile

:libs

新增對外部 js 函式庫的依賴項,也就是具有正確的 goog.provides()goog.requires() 呼叫的 Google Closure 相容 javascript 檔案。請注意,將監看這些目錄中的檔案,如果修改這些檔案,將會重新建置。

可以給定路徑或檔案名稱。相對路徑是相對於目前工作目錄(通常是專案根目錄)。

預設為空向量 []

:libs ["closure/library/third_party/closure"
       "src/js"
       "src/org/example/example.js"]

:nodejs-rt

停用 Node.js 執行時間支援的旗標。當目標不是 Node.js,而是目標了解 Node.js 樣式 require 慣例的 JavaScript 工具時很有用

:nodejs-rt false

:optimize-constants

當設定為 true 時,常數(例如關鍵字和符號)只會建立一次,並將寫入單獨的檔案 (cljs/core/constants.js)。編譯器將發出對常數表中定義的常數的參考,而不是為其建立新物件。此選項主要用於發行建置,因為它可以由於減少配置而提高效能。在 :advanced 優化設定下預設為 true,否則為 false

:optimize-constants true

:output-wrapper

包裝 Javascript 輸出以避免覆蓋全域變數。有四種可能的值類型

  1. 函式 - 接受一個引數,即編譯後的 javascript 輸出。應傳回其他一些有效的 javascript 輸出。對於最簡單的情況,只需將 javascript 輸出與類似於 #3 (預設包裝) 的內容進行字串串聯

  2. 字串 - 某些與 format 內插相容的字串。例如,"(function(){%s};)()"format 接收編譯後的 javascript 輸出作為第二個引數,沒有其他引數。

  3. Truthy - 使用預設 (function(){…​};)() 包裝

  4. Falsey - 不包裝。這是預設值。

;; function
(fn [js-output]
  (str "(function(){" js-output "};).call(window);"))

;; string
"(function(){%s};).call(window);"

;; truthy
true

;; falsey
false

:package-json-resolution

設定在解析 NPM 套件上的 (和之間的) 相依性時,依哪種順序使用哪個 package.json 條目 (例如 "browser""module""main")。

預設為

  • 如果 :target:nodejs,則為 :nodejs (["main"])

  • 否則為 :webpack (["browser", "module", "main"])

也可以採用自訂條目向量,例如 ["browser", "main"]

:parallel-build

當設定為 true 時,平行編譯來源,利用多個核心。

:parallel-build true

:preamble

將指定檔案的內容前置到每個輸出檔案。檔案應位於類別路徑上。僅在優化設定為 :none 以外的值時有效。

預設為空向量 []

:preamble ["license.js"]

決定是否在 JavaScript 輸出註解,這些註解可用於判斷編譯程式碼的原始來源。

預設值為 false。

:print-input-delimiter false

:process-shim

預設為

  • 如果 :target:nodejs,則為 false

  • 否則為 true

自動為 Node.js process.env 提供 shim,其中包含單一 Google Closure 定義,NODE_ENV,預設值為 "development"。在生產環境中,NODE_ENV 將設定為 "production"。如果設定為 false,則會停用所有上述行為。

:pseudo-names

:advanced 模式優化下,決定是否發出可讀的名稱。這在除錯優化後的 JavaScript 時很有用,並且有助於尋找遺失的 externs。預設值為 false。

:pseudo-names true

:recompile-dependents

為了確保正確性,ClojureScript 編譯器現在會在父命名空間變更時,總是重新編譯依賴的命名空間。這可以防止建置損毀和被吞噬的警告。然而,這可能會影響編譯時間,具體取決於應用程式的結構。此選項預設為 true

:recompile-dependents false

:rename-prefix

指定將前置到所有變數的前綴。當使用 程式碼分割 時,可用於防止干擾 JavaScript 全域範圍中的其他程式碼。

:rename-prefix "prefix"

:rewrite-polyfills

如果設定為 true,google closure compiler 將會加入 polyfill(例如當您使用原生 javascript Promise 時)。這需要將 :language-in 設定為 :es6 或更高版本,否則會被靜默忽略!

:language-in  :es6
:rewrite-polyfills true

:source-map-asset-path

提供對 sourceMappingURL 註解的精細控制,該註解會在啟用原始碼對應時附加到產生的 JavaScript 檔案中。

:source-map-path

設定原始碼對應中參考的原始程式碼檔案的路徑,以避免進一步的網路伺服器配置。

:source-map-path "public/js"

此選項會影響發出的原始碼對應 V3 JSON 檔案的 sources 條目。

:source-map-asset-path "http://foo.com/public/js/out"

:source-map-timestamp

將快取失效時間戳記新增至原始碼對應網址。這有助於在即時重新載入程式碼時保持原始碼對應的最新狀態。

:source-map-timestamp true

:spec-skip-macros

是否停用 spec 巨集檢查。預設值為 false

:spec-skip-macros true

:static-fns

在發出的 JavaScript 中,對特定函式參數數量採用靜態分派,而不是使用 call 建構。預設值為 false,但在進階優化下除外。在 REPL 開發時設定為 false 以方便函式重新定義很有用,並且為了效能在發佈時設定為 true 很有用。

此設定不適用於標準程式庫,該程式庫總是使用隱式設定為 true 的 :static-fns 編譯。

:static-fns true

若要為呼叫宣告的函式啟用靜態分派,請提供 :arglists 元數據。例如,如果 (declare foo) 先於 (foo 1 2),則將採用動態分派。如果改為 (declare ^{:arglists '([x y])} foo) 先於 (foo 1 2),則如果啟用 :static-fns,則將採用靜態分派。

:target-fn

設定一個任意的 Clojure 函式,以產生開發主要進入點 JavaScript 檔案。必須是一個符號,代表類別路徑上命名空間中存在的 Clojure 函式。僅在 :optimization :none 下使用。

:target-fn 'some.custom.dev-bootstrap

:warnings

此旗標將啟用/停用編譯器針對未宣告的變數、錯誤的函式呼叫參數數量等的警告。可以是布林值,用於啟用/停用常見警告,或包含特定警告鍵及其相關布林值的地圖。預設值為 true。

:warnings true
;; OR
:warnings {:fn-deprecated false} ;; suppress this warning

支援以下警告

  • :declared-arglists-mismatch,宣告的 :arglists 與定義不符

  • :dynamic,非動態變數的動態繫結

  • :extend-type-invalid-method-shape,方法參數數量必須分組在一起

  • :extending-base-js-type,JavaScript 基礎型別擴充

  • :fn-arity,無效的調用參數數量

  • :fn-deprecated,已棄用的函式使用

  • :fn-var,先前繫結至函式的變數變更為不同型別

  • :infer-warning,與 externs 推斷相關的警告

  • :invalid-arithmetic,無效的算術

  • :invalid-array-access,無效使用 agetaset

  • :invalid-protocol-symbol,無效的協定符號

  • :invoke-ctor,將型別建構子當作函式調用

  • :js-shadowed-by-local,名稱被區域變數遮蔽

  • :multiple-variadic-overloads,多個可變參數數量

  • :munged-namespace,命名空間名稱包含保留的 JavaScript 關鍵字

  • :ns-var-clash,命名空間與變數衝突

  • :overload-arity,重複的參數數量

  • :preamble-missing,遺失前導碼

  • :private-var-access,從另一個命名空間存取私有變數

  • :protocol-deprecated,已棄用的協定使用

  • :protocol-duped-method,重複的協定方法實作

  • :protocol-impl-recur-with-target,在遞迴至協定方法標頭時傳遞了目標

  • :protocol-impl-with-variadic-method,協定實作採用可變參數簽名

  • :protocol-invalid-method,協定方法與宣告不符

  • :protocol-multiple-impls,協定實作多次

  • :protocol-with-overwriting-method,協定方法覆寫其他協定方法

  • :protocol-with-variadic-method,協定宣告可變參數簽名

  • :redef,變數重新定義

  • :single-segment-namespace,單一段命名空間

  • :variadic-max-arity,參數數量大於可變參數數量

  • :undeclared-ns,變數參考不存在的命名空間

  • :undeclared-ns-form,在 ns 表單中參考不存在的命名空間

  • :undeclared-protocol-symbol,參考了未宣告的協定

  • :undeclared-var,未宣告的變數

  • :unprovided,未提供要求的命名空間

  • :unsupported-js-module-type,不支援的 JavaScript 模組型別

  • :unsupported-preprocess-value,不支援的外部程式庫前處理值

:watch-fn

是一個在成功建置後將被呼叫的函式。

僅適用於 cljs.build.api/watch

:watch-fn (fn [] (println "Updated build"))

:warning-handlers

設定一組處理常式,以自訂發出的警告的處理方式。處理常式應該是符號 (將解析為函式) 或函式。每個函式的簽名為 [warn-type env warn-info]warn-type 是一個關鍵字,描述 警告env 是分析環境,而 warn-info 是特定警告型別的額外有用資訊的地圖。

預設為

:warning-handlers [cljs.analyzer/default-warning-handler]