使用Closure库构建库

时间:2015-07-21 12:03:42

标签: javascript google-closure-compiler google-closure google-closure-library

我正在尝试使用Closure Library“构建”我的项目;可悲的是,经过多次测试后,我无法构建没有问题的东西。我的项目是一个库,所以我没有一个入口点或类似的东西,大部分代码都是由用户的对象和函数组成的。

我有一个这样的项目:

 - build
      - build.sh
      - compiler.jar
 - libs
      - closure-library
 - src

我的 build.sh 文件:

java -jar compiler.jar --compilation_level SIMPLE_OPTIMIZATIONS --js_output_file out.js `find ../src/ -name '*.js'`

使用此命令行我收到错误:goog.require('goog.vec.Vec2');;所以我想我需要在这一行中包含谷歌闭包库,对吗?

所以,我试图将build.sh更改为类似的东西(添加了封闭库文件夹):

java -jar compiler.jar --compilation_level SIMPLE_OPTIMIZATIONS --js_output_file out.js `find ../src/ ../libs/closure-library/closure/ -name '*.js'`

使用这个脚本,我从闭包库中得到了很多错误:

../libs/closure-library/closure/goog/i18n/datetimeformat_test.js:572: ERROR - This style of octal literal is not supported in strict mode.
  var date = new Date(Date.UTC(2015, 11 - 1, 01, 11, 0, 1));

我生成的文件(out.js)没有得到我所有库的功能。我不确定问题在哪里。

  • 我是否真的必须在构建部分中包含谷歌闭包?
  • 我正在开发一个Javascript库,所以我没有一个入口点,所有代码都必须包含在生成的文件中。那么,我该怎么做呢?

谢谢你的时间!

修改 我尝试了不同的东西:删除所有行,如“goog.require('goog.vec.Mat4');”来自我的图书馆。构建成功完成但我的模拟不再起作用:Cannot read property 'Mat4' of undefined

1 个答案:

答案 0 :(得分:1)

您正在寻找的功能记录在Manage Closure Dependencies

下的GitHub wiki上

确定依赖关系

1。您的图书馆来源包含goog.provide语句

在这种情况下,您将--only_closure_dependencies--closure_entry_point标志结合使用。你的"条目" points是库中要从中计算依赖项的任何类。您可以有多个入口点。

2。您的库源不包含goog.provide语句

使用--manage_closure_dependencies标志。这指示编译器在输出中包含任何不包含goog.provide语句的JS文件,并根据这些文件中的goog.require语句计算所有需要的依赖项。

将文件提供给编译器

Closure-compiler的--js输入标志可以指定minimatch glob样式模式,这是提供Closure-library文件作为输入的首选方法。如果您使用的是--manage_closure_dependencies选项,则必须排除Closure-library测试文件。

示例:

java -jar compiler.jar --compilation_level=SIMPLE_OPTIMIZATIONS
    --js_output_file=out.js
    --manage_closure_dependencies
    --js='../src/**.js'
    --js='../libs/closure-library/**.js'
    --js='!../libs/closure-library/**_test.js'