我正在编写一个基于[libphonenumber]的简单电话号码解析器。不幸的是,“http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js”需要永远加载,当我忘记文件并将其包含为src =“base.js”时,弹出一堆错误。
我的猜测是,这是因为尚未加载库,因此goog.require()语句失败。
我该怎么办?
<!DOCTYPE html>
<html>
<head>
<title>Phone Number Parser</title>
<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script>
goog.require('goog.dom');
goog.require('goog.json');
goog.require('goog.proto2.ObjectSerializer');
goog.require('goog.string.StringBuffer');
</script>
<script src="phonemetadata.pb.js"></script>
<script src="phonenumber.pb.js"></script>
<script src="metadata.js"></script>
<script src="phonenumberutil.js"></script>
</head>
<body>
<script>
numbers = ['6509066389', '+40723875777', '720-935-6433', '914-262-7178', '7123040634'];
for (i in numbers) {
console.log(format_for_five9(numbers[i]));
}
function format_for_five9(phoneNumber) {
var $ = goog.dom.getElement;
var regionCode = 'US';
var output = new goog.string.StringBuffer();
try {
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);
number_json_serial = goog.json.serialize(new goog.proto2.ObjectSerializer(goog.proto2.ObjectSerializer.KeyOption.NAME).serialize(number));
number_json = goog.json.parse(number_json_serial);
if(phoneUtil.isValidNumberForRegion(number, regionCode)) {
five9_format = number_json.national_number.toString();
}
else {
five9_format = number_json.country_code.toString() + number_json.national_number.toString();
}
} catch (e) {
output.append('\n' + e);
console.log(e);
}
return five9_format;
}
</script>
</body>
</html>
答案 0 :(得分:11)
闭包库旨在与闭包编译器一起使用,以编译和缩小您的javascript以进行生产。它不打算在生产中用作原始文件。即使在您的开发环境中,您也可以使用http://plovr.com/动态编译和提供您的javascript。
由于类型注释和类似Java的结构,闭包在原始形式中非常冗长,闭包编译器不仅会缩小脚本,还会优化和删除未使用的脚本以使事情更快。
以下是使用plovr动态提供javascript代码的示例
java -Xmx256m -jar plovr.jar serve -p 9811 /path/to/your/closure/config.js
这将在localhost:9811上提供已编译的javascript文件。生产:
java -jar plovr.jar build /path/to/your/closure/config.js > production.js
查看有关如何配置plovr以编译或提供javascript的文档http://plovr.com/docs.html。
答案 1 :(得分:8)
您不应该首先直接链接库。
解决方案是下载整个库并将它们托管在托管上述代码的同一个Web服务器上。您应该将javascript存储在与 phonemetadata.pb.js , metadata.js 等相同的目录中。这样就可以像其他所有目录一样包含脚本:
<script src="base.js">
您可以通过git(git clone https://github.com/google/closure-library.git
)或as a zip file下载Closure。