2017-03-04 111 views
1

我想寫使用最近的谷歌的關閉編譯器的版本,壓縮JavaScript文件一個ColdFusion腳本。 此程序以兩個錯誤結束:Closure編譯器:變量定義是不宣

JSC_UNDEFINED_VARIABLE. variable module is undeclared at jquery-3.1.1.js line 9767 : 12 
JSC_UNDEFINED_VARIABLE. variable define is undeclared at jquery-3.1.1.js line 9784 : 13 

我不知道什麼是魔法。 moduledefine是常見的JS變量;我相信Closure知道他們。我缺少什麼設置?有沒有外部人員失蹤?我是否必須設置某個CompilerOption?

<cfset options = createObject("java", "com.google.javascript.jscomp.CompilerOptions").init()> 
<cfset cl = createObject("java", "com.google.javascript.jscomp.CompilationLevel")> 
<cfset wl = createObject("java", "com.google.javascript.jscomp.WarningLevel")> 
<cfset cl.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(options)> 
<cfset cl.SIMPLE_OPTIMIZATIONS.setDebugOptionsForCompilationLevel(options)> 
<cfset lm = createobject("java", "com.google.javascript.jscomp.CompilerOptions$LanguageMode")> 

<cfset options.setEnvironment(options.Environment.BROWSER)> 

<cfset schar = createobject("java", "java.nio.charset.StandardCharsets")> 
<cfset options.setOutputCharset(schar.UTF_8)> 

<cfset wl.VERBOSE.setOptionsForWarningLevel(options)> 

<cfset comp = createObject("java", "com.google.javascript.jscomp.Compiler").init()> 
<cfset clr = createObject("java", "com.google.javascript.jscomp.CommandLineRunner")> 
<cfset sourceFile = createObject("java", "com.google.javascript.jscomp.SourceFile")> 

<cfset arrInputs = createObject("java", "java.util.ArrayList").init()> 
<cfset arrExterns = createObject("java", "java.util.ArrayList").init()> 

<cfset arrInputs.add(
    sourceFile.fromCode(
     javaCast("string", "jquery-3.1.1.js"), 
     javaCast("string", fileRead(expandPath("../advanced/js/jquery-3.1.1.js"), "utf-8")) 
    ) 
)> 

<cfset arrExterns.addAll(clr.getBuiltinExterns(options.Environment))> 

<cfset result = comp.compile(arrExterns, arrInputs , options)> 

<cfoutput> 
    |#result.success#| 

    <cfloop from="1" to="#arrayLen(result.errors)#" index="i"> 
     err: #result.errors[i]#<br> 
    </cfloop> 
</cfoutput> 

回答

2

模塊,並定義是常見的JS變量

module通常是CommonJS的模塊系統的一個指標。 AMD模塊系統使用define。既不是默認的JS變量,也不是瀏覽器已知的。

jQuery是使用通用模塊定義圖案jQuery對象導出或者作爲模塊(CommonJS的或AMD適當的),或者如果沒有找到,作爲全局變量。當指定--process_common_js_modules標誌時,閉包編譯器可以識別該模式並刪除特定於模塊的部分。

+0

此命令行開關在我ColdFusion代碼將是'表示' –