Closure编译器:变量define是未声明的

时间:2017-03-04 02:44:58

标签: google-closure-compiler

我正在尝试使用最新版本的Google闭包编译器编写一个压缩JavaScript文件的Coldfusion脚本。 该程序以两个错误结束:

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>

1 个答案:

答案 0 :(得分:2)

  

模块和定义是常见的JS变量

module通常是CommonJS模块系统的指标。 AMD模块系统使用define。既不是默认的JS变量,也不是浏览器已知的。

jQuery使用通用模块定义模式将jQuery对象导出为模块(CommonJS或AMD),如果没有找到,则作为全局变量导出。 Closure-compiler可以识别此模式,并在指定--process_common_js_modules标志时删除模块特定部分。