如何在本地托管谷歌libphonenumber?

时间:2013-09-07 21:22:51

标签: google-closure google-closure-library libphonenumber

在我的localhost开发期间,我正在尝试自托管libphonenumber库。我正在尝试以下内容:

<script src="//closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script>goog.require('goog.proto2.Message');</script>
<script src="scripts/vendor/pn/phonemetadata.pb.js"></script>
<script src="scripts/vendor/pn/phonenumber.pb.js"></script>
<script src="scripts/vendor/pn/metadata.js"></script>
<script src="scripts/vendor/pn/phonenumberutil.js"></script>
<script src="scripts/vendor/pn/asyoutypeformatter.js"></script>

这是有效的,但我仍然依赖于外部托管的组件:闭包库。我已经尝试使用closure-lite,这显然是(我在这里很新)一个非常完整的闭包库版本,可用于自托管。我尝试过以下操作:

<script src="scripts/vendor/closure-lite.js"></script>
<script>goog.require('goog.proto2.Message');</script>
<script src="scripts/vendor/pn/phonemetadata.pb.js"></script>
<script src="scripts/vendor/pn/phonenumber.pb.js"></script>
<script src="scripts/vendor/pn/metadata.js"></script>
<script src="scripts/vendor/pn/phonenumberutil.js"></script>
<script src="scripts/vendor/pn/asyoutypeformatter.js"></script>

但是goog.proto2.Message不可用。我收到以下错误:

Uncaught TypeError: Cannot read property 'Message' of undefined

错误来自phonemetadata.pb.js脚本:

goog.inherits(i18n.phonenumbers.NumberFormat, goog.proto2.Message);

我可以做些什么来完全自我托管libphonenumber

3 个答案:

答案 0 :(得分:25)

您可能已经解决了这个问题,但我找到了一种将所有libphonenumber代码编译成包含闭包库内容的文件的简单方法。

转到http://closure-compiler.appspot.com/home

这是谷歌关闭编译器的在线版本。

然后输入如下内容:

// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name libphonenumber.js
// @use_closure_library true
// @code_url https://raw.githubusercontent.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/phonemetadata.pb.js
// @code_url https://raw.githubusercontent.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/phonenumber.pb.js
// @code_url https://raw.githubusercontent.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/metadata.js
// @code_url https://raw.githubusercontent.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/phonenumberutil.js
// @code_url https://raw.githubusercontent.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/asyoutypeformatter.js
// @formatting pretty_print
// ==/ClosureCompiler==

您可以添加或删除所需的任何额外文件。

然后单击“编译”。

这将从存储库中检索每个最新文件,并将其构建到单个javascript文件中。

现在您不必担心处理所有的闭包库代码,因为您已经编译了所需的内容。

希望这有帮助。

编辑:我发现这对于处理库的更新非常有用。如果您只是在编译器中重新运行它,您将获得包含所有最新更新的新javascript文件。

答案 1 :(得分:24)

由于google将代码移至github,因此过程已经改变,如果只是一点点:

1)转到http://closure-compiler.appspot.com/home

2)插入以下内容

// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name libphonenumber.js
// @use_closure_library true
// @code_url https://github.com/googlei18n/libphonenumber/raw/master/javascript/i18n/phonenumbers/phonemetadata.pb.js
// @code_url https://github.com/googlei18n/libphonenumber/raw/master/javascript/i18n/phonenumbers/phonenumber.pb.js
// @code_url https://github.com/googlei18n/libphonenumber/raw/master/javascript/i18n/phonenumbers/metadata.js
// @code_url https://github.com/googlei18n/libphonenumber/raw/master/javascript/i18n/phonenumbers/phonenumberutil.js
// @code_url https://github.com/googlei18n/libphonenumber/raw/master/javascript/i18n/phonenumbers/asyoutypeformatter.js
// @formatting pretty_print
// ==/ClosureCompiler==

3)单击“编译”

4)完成:当前编译的libphonenumber.js文件应出现在RHS面板中

答案 2 :(得分:0)

我建议您查看该库的这个vanilla javascript端口:https://github.com/halt-hammerzeit/libphonenumber-js/

它轻量级,可以与Webpack和东西捆绑