12

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ですか?

4

3 に答える 3

28

あなたはすでにこれを解決しているかもしれませんが、私はすべての libphonenumber コードをクロージャ ライブラリを含む 1 つのファイルにコンパイルする非常に簡単な方法を見つけました。

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

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 パネルに表示されます。

于 2016-02-15T04:58:08.080 に答える
0

ライブラリのこのバニラ javascript ポートを確認することをお勧めします: https://github.com/halt-hammerzeit/libphonenumber-js/

軽量で、Webpack などとバンドルできます

于 2016-11-28T01:59:02.110 に答える