2

単純な clojurescript プログラムを高度なモードで正しくコンパイルするのに問題があります。たとえば、ここに簡単なプログラムがあります

(ns cljs-basics.core)

(.write js/document "hello, cljs")

(def basicsApp (.module js/angular "basics" (array)))

(def testController 
  (.controller basicsApp "TestCtrl" (fn [$scope])))
(aset testController "$inject" (array "$scope"))

およびhtmlファイル:

<!doctype html>
<html ng-app="basics" lang="en">
<head>
    <meta charset="utf-8">
    <title>Simple CLJS</title>
    <script src="components/angular/angular.js"></script>
    <script src="js/basic.js"></script>
</head>
<body ng-controller="TestCtrl">
    {{testvar}}
</body>
</html>

コードは :simple で正常に実行されていますが、:advanced をオンにすると機能しません。.controllerand呼び出しは.moduleシンボルにコンパイルされるので、

Uncaught TypeError: Object #<Object> has no method 'Uf' basic.js:5105
Uncaught Error: No module: basics 

コンパイラがすべてを一緒に縮小できるように、何らかの形で angular.js ファイルを含める方法はありますか?

4

3 に答える 3

0

興味深いのは、ライブラリ自体を extern ファイルとして使用できることです。これは、すべての Closure コンパイラが extern ファイルを処理する際にシンボル (プレーンな JavaScript オブジェクトとその中のシンボル - 属性、メソッド、およびネストされたオブジェクト) を定義しているためです。

また、extern ファイルの書き込みを回避するのに役立つライブラリを作成しました: https://github.com/myguidingstar/fence

于 2014-11-29T09:56:48.860 に答える