ClojureScript

コンパイラオプション

共通オプション

:asset-path

:mainを使用する場合、Webサーバーの構成により、エントリポイントスクリプトがスクリプトをロードする場所を制御する必要があることがよくあります。:asset-pathは、ファイルシステムパスではなく相対URLパスです。たとえば、出力ディレクトリが:output-dir "resources/public/js/compiled/out"であり、Webサーバーが"resources/public"からファイルを提供している場合、エントリポイントスクリプトは "js/compiled/out"からスクリプトをロードする必要があります。

:asset-path "js/compiled/out"

:bundle-cmd

:target :bundleを使用する場合、ビルド後に実行するシェルコマンドを設定します。このコマンドはパラメーター化できません。開発ビルド後に実行される:noneと、Closure Compilerを介して渡されるビルド後に実行される:defaultの両方を指定する必要があります。コマンドは終了するものである必要があります。つまり、これを使用してウォッチャーを起動することはできません。

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

:checked-arrays

:warnまたは:errorに設定すると、agetおよびasetに渡される推論された型と実行時値をチェックします。推論された型の不一致は、:invalid-array-access警告をトリガーします。:warnに設定されている場合は不正な値が渡されたときにログに記録され、:errorに設定されている場合はスローされます。この機能を無効にするために、falseの値に設定できます。

この設定は、:optimizations:advancedに設定されている場合は適用されません。

:checked-arrays :warn

:externs

外部ライブラリのexternsファイルを構成します。ファイルは、現在の作業ディレクトリとクラスパスで検索されます。

このオプションと以下のオプションについては、次のURLで非常に良い説明を見つけることができます: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モジュールサポート(アルファ版)を参照してください。

  • :preprocess(オプション)他の方言(JSXなど)でコードを前処理/変換するために使用されます。値はシンボルまたはキーワードのいずれかです。シンボルが指定されている場合は、2つのパラメーター(js-moduleとオプションマップ)を受け取る関数に解決する必要があります。シンボルが参照する名前空間がまだロードされていない場合、コンパイラはその名前空間を要求します。値がキーワードの場合、cljs.clojure/js-transformsマルチメソッドのディスパッチ値として使用されます。詳細については、JavaScriptライブラリの前処理を参照してください。

  • :global-exports(オプション)提供された名前空間をグローバルにエクスポートされた値にマップするために使用されます。キーはシンボルまたは文字列にすることができます。存在する場合、外部ライブラリは必要に応じて慣用的に使用できます。つまり、:refer:rename:asなどのサポート。

:global-goog-object&array

デフォルトはfalseです。trueの場合、goog.objectgoog.arraygoog.module名前空間としてではなく、グローバル名前空間としてロードします。

:install-deps

trueの場合、上流の依存関係で宣言されているものを含む、宣言されたすべての:npm-depsを自動的にインストールします。

:main

エントリポイントの名前空間を指定します。最適化レベル:noneと組み合わせると、:mainにより、コンパイラはgoog/base.js、名前空間のJavaScriptファイル、および必要なgoog.requireステートメントをインポートする単一のJavaScriptファイルを出力します。これにより、開発環境と本番環境でHTMLマークアップを同じにすることができます。

通常はシンボルとして提供されます。EDN構成ファイルでは、シンボルを引用符で囲む必要はありません。

:main foo.bar

:mainは文字列として提供することもできますが、前者の方が推奨されます。

:main "foo.bar"

:asset-pathも参照してください。

注意:これにより、メインの名前空間と、すべての:required名前空間の推移的な閉包が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で1回だけ表示されることに注意してください。

: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機能は、最適化されたビルドではアルファ版ステータスです。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

ソースマップを参照してください。最適化が: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によって生成された出力は、これらの依存関係に対して生成されたNode.jsスタイルのrequireインポートを処理できる他のJavaScriptツール(つまり、Webpack、Metro)に渡す必要があります。

:noneターゲットは、特定の実行環境に依存しない出力が生成されるようにします。

:target :nodejs

:verbose

コンパイラのアクティビティから詳細と測定値を出力します。

:verbose true

あまり一般的でないオプション

:anon-fn-naming-policy

Google Closureコンパイラが、代入および変数宣言でr値として発生する匿名関数の命名をどのように行うかについての戦略。デフォルトは:offです。

:anon-fn-naming-policy :unmapped

次の値がサポートされています。

  • :off 匿名関数に名前を付けません。

  • :unmapped 代入の左辺に基づいた名前を生成します。変数とプロパティの名前変更の後で実行されるため、生成された名前は短く、難読化されます。

  • :mapped 短い一意の名前を生成し、それらを代入の左辺に基づいた、より意味のある名前へのマッピングを提供します。

:aot-cache

ClojureScriptがcljs.main経由で使用されている場合はデフォルトでtrue、それ以外の場合またはClojureScriptがgit depとして使用されている場合はfalseになります。JARから生成されたコンパイラアーティファクトに共有AOTキャッシュを使用するかどうかを制御します。

:aot-cache true

:browser-repl

標準のブラウザREPLに必要なコンポーネントを自動的に挿入します。ブラウザREPLを起動する場合、デフォルトはtrueになります。

:browser-repl true

:cache-analysis

実験的。コンパイラ分析をディスクにキャッシュします。これにより、コールドビルドとREPLの起動時間が短縮されます。

REPLの場合、デフォルトはtrueです。それ以外の場合、:optimizations:noneの場合にのみデフォルトはtrueになります。

:cache-analysis true

:closure-defines

@defineまたはcljs.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)できます。ただし、それを行うには、ifまたはcondidentical?比較と組み合わせて使用する必要があります。他の形式(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 Warning wikiを参照してください。

:compiler-stats

コンパイラのアクティビティに関する基本的なタイミング測定値をレポートします。

デフォルトはfalseです。

:compiler-stats true

:deps-cmd

node_modulesをインストールするコマンドを設定します。"npm""yarn"のみがサポートされています。

:deps-cmd "yarn"

:elide-asserts

このフラグを設定すると、コンパイル中に(assert x )のすべての呼び出しが削除されます。これには、:preおよび:post条件に関連付けられた暗黙のassertも含まれます。本番環境で役立ちます。デフォルトは、高度なコンパイルでも常にfalseです。これは、Closureライブラリで使用されるgoog.asserts.ENABLE_ASSERTSを指定するものではなく、異なるものです。

JVM ClojureScriptでは、実行時に*assert*を動的にfalseに設定することはできません。このコンパイラフラグを明示的に使用して削除を実行する必要があります。一方、セルフホストのClojureScriptでは、*assert*を設定すると、Clojureと同様にassertが削除されます。

:elide-strict

JavaScript出力でuse strictステートメントを削除するかどうか。デフォルトはtrueです。

:elide-strict false

:fingerprint

デフォルトはfalseです。フィンガープリントを有効にするかどうか。フィンガープリントを有効にすると、コンテンツSHAが出力ファイル名に追加されます。フィンガープリントされたファイル名をマッピングするために、manifest.edn:output-dirに生成されます。これは、: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機能はアルファステータスです。Reagentなどの一部のライブラリでは、:fn-invoke-directが正しくないコードを生成することが知られています。

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

:hashbang

:target :nodejsを使用する場合、コンパイラはコンパイルされたソースの最初の行としてシバンを出力し、実行可能にします。実行可能ファイルではなくnode.jsモジュールをビルドする場合は、このオプションを使用してシバンを削除します。

:hashbang false

:infer-externs

JavaScriptへのインターオップ呼び出し用のエクスターンを自動的に生成できるようにします。デフォルトはfalseです。詳細については、Externs (Alpha)を参照してください。

:infer-externs true

:language-in および :language-out

クロージャライブラリの入力言語と出力言語を構成します。次のいずれかになります。

  • :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 の出力をラップします。可能な値の型は4つあります。

  1. Function - コンパイルされた JavaScript の出力を引数として1つ受け取ります。別の有効な JavaScript の出力を返す必要があります。最も単純なケースでは、JavaScript の出力を #3 (デフォルトのラッパー) のようなものと文字列結合するだけです。

  2. String - format 補間に対応した文字列です。たとえば、"(function(){%s};)()" のようなものです。format は、コンパイルされた JavaScript の出力を2番目の引数として受け取り、それ以外は何も受け取りません。

  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

デフォルト値が "development" の単一の Google Closure 定義である NODE_ENV を含む Node.js の process.env のためのシムを自動的に提供します。本番環境では、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 はポリフィルを追加します (たとえば、ネイティブ JavaScript の Promise を使用する場合)。 これには、:language-in:es6 以上に設定されている必要があります。そうでない場合は、何もせずに無視されます!

:language-in  :es6
:rewrite-polyfills true

:source-map-asset-path

ソースマッピングが有効になっている場合に、生成された JavaScript ファイルに追加される sourceMappingURL コメントを細かく制御します。

:source-map-path

ソースマップで参照されるソースファイルへのパスを設定して、Webサーバーの追加構成を回避します。

:source-map-path "public/js"

このオプションは、出力されたソースマップ V3 JSON ファイルの sources エントリに影響します。

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

:source-map-timestamp

ソースマップの URL にキャッシュ破壊用のタイムスタンプを追加します。これは、コードをライブリロードするときにソースマップを最新の状態に保つのに役立ちます。

:source-map-timestamp true

:spec-skip-macros

spec マクロのチェックを無効にするかどうか。デフォルトは false です。

:spec-skip-macros true

:static-fns

call 構造を使用するのではなく、出力された JavaScript で特定の関数の引数数に対して静的ディスパッチを使用します。高度な最適化の場合を除き、デフォルトは false です。REPL開発時に関数の再定義を容易にするために false に設定し、リリースパフォーマンスのために true に設定すると便利です。

この設定は標準ライブラリには適用されません。標準ライブラリは常に :static-fns が暗黙的に true に設定された状態でコンパイルされます。

:static-fns true

宣言された関数への呼び出しに対して静的ディスパッチを有効にするには、:arglists メタデータを提供します。たとえば、(declare foo)(foo 1 2) の前に記述されている場合、動的ディスパッチが使用されます。代わりに (declare ^{:arglists '([x y])} foo)(foo 1 2) の前に記述されている場合、:static-fns が有効になっていれば静的ディスパッチが使用されます。

:target-fn

開発用のメインエントリポイントの JavaScript ファイルを生成するための任意の Clojure 関数を設定します。クラスパス上の名前空間に存在する 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, 以前に fn にバインドされていた var が異なる型に変更された

  • :infer-warning, externs の推論に関する警告

  • :invalid-arithmetic, 無効な算術演算

  • :invalid-array-access, aget または aset の無効な使用

  • :invalid-protocol-symbol, 無効なプロトコルシンボル

  • :invoke-ctor, 関数として呼び出された型コンストラクター

  • :js-shadowed-by-local, ローカル変数によってシャドウされた名前

  • :multiple-variadic-overloads, 複数の可変引数

  • :munged-namespace, 名前空間名に予約された JavaScript キーワードが含まれている

  • :ns-var-clash, 名前空間が var と衝突する

  • :overload-arity, 重複する引数

  • :preamble-missing, プリアンブルがない

  • :private-var-access, 別の名前空間からのプライベート var アクセス

  • :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, var の再定義

  • :single-segment-namespace, 単一セグメントの名前空間

  • :variadic-max-arity, 可変引数の引数数よりも大きい引数数

  • :undeclared-ns, 存在しない名前空間を参照する var

  • :undeclared-ns-form, 存在しない ns フォーム内の名前空間参照

  • :undeclared-protocol-symbol, 未宣言のプロトコルが参照されている

  • :undeclared-var, 未宣言の 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]