12

在我的本地主机上进行开发期间,我正在尝试自行托管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

4

3 回答 3

28

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

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

这是 Google 的闭包编译器的在线版本。

然后输入如下内容:

// ==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 文件。

于 2013-10-04T01:28:11.260 回答
27

自从谷歌将他们的代码移到 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 面板中

于 2016-02-15T04:58:08.080 回答
0

我可以建议你看看这个库的香草 JavaScript 端口:https ://github.com/halt-hammerzeit/libphonenumber-js/

它轻巧,可以与 Webpack 和其他东西捆绑在一起

于 2016-11-28T01:59:02.110 回答