使用闭包编译器组合两个js文件

时间:2012-10-23 07:03:00

标签: javascript google-closure-compiler

我有两个js文件:

1.js

(function(){
  function setLength(a,len){
  a.length=len;
}
  ...........
})();

2.js:

function View(){
  setLength(this,3);
}

注意,2.js将访问setLength中定义的方法(1.js)。

所以我希望编译器使用相同的替换来编译这两个文件。

我想要这样的结果:

(function(){
  function x(a,b){
  a.length=b;
}
  ...........
})();

function View(){
  x(this,3);
}

这可能吗?

BTW,我使用compiler.js来编译文件:

java -jar compiler.jar --js file.js --js_output_file file.min.js

这是单个文件,我想编译多个文件,每个文件都有自己的输出文件,如下所示:

java -jar compiler.jar --js file.js,file2.js --js_output_file file.min.js,file2.min.js

1 个答案:

答案 0 :(得分:2)

要使用相同的替换编译这两个文件,闭包编译器的两个选项可以帮助

 
 --variable_map_input_file VAL          : File containing the serialized version
                                           of the variable renaming map produced
                                           by a previous compilation
 --variable_map_output_file VAL         : File where the serialized version of t
                                          he variable renaming map produced shou
                                          ld be saved

所以你可以

  • 首先编译1.js并生成variable_map。

     java -jar compiler.jar --js 1.js --js_output_file 1.min.js -variable_map_output_file variable_map.txt
    
  • 使用生成的variable_map进行第二次编译2.js。

     java -jar compiler.jar --js 2.js --js_output_file 2.min.js --variable_map_input_file variable_map.txt      
    

如果2.js将引用1.js中定义的函数,则编译器需要extern.js才能编译2.js

使用输出包装器(function(){%s})(),无法从2.js访问1.js中定义的所有函数。您可能需要删除包装器,或使用export