如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
How do I use Google Closure Stylesheet renaming with an external Javascript Library such as jQuery?
我正在研究Google的样式表重命名功能,不知道如何重写我的jquery选择器。我觉得文档对此不太清楚。
如果我有这样的代码:
<div class="MyClass"></div>
<div id="MyID"></div>
$('.MyClass').someFunc();
$('#MyID').someFunc();
HTML和javascript必须如何编写才能使CSS重命名工作?
谢谢你的建议。
要使闭包样式表与jQuery等外部库结合使用,还需要使用闭包库来添加对goog.getCssName
的支持。然而,由于编写闭包库是为了最大限度地利用闭包编译器的死代码消除,因此最终输出中只会包含非常少量的库代码(本例中约为1KB)。
步骤1-设置您的项目
您需要以下工具:
- 闭包库
- 闭包编译器
- 闭包模板
- 闭包样式表
步骤2-设置源文件
样式表源(sample.gss)
@def BG_COLOR rgb(235, 239, 249);
@def DIALOG_BORDER_COLOR rgb(107, 144, 218);
@def DIALOG_BG_COLOR BG_COLOR;
.MyClass {
background-color: BG_COLOR;
height:100px;
}
#MyId {
background-color: DIALOG_BG_COLOR;
border: 1px solid DIALOG_BORDER_COLOR;
height:100px;
}
闭包模板源(sample.soy)
{namespace ClosureSample}
/**
* SampleHtml
*/
{template .SampleHtml autoescape="false"}
<div class="{css MyClass}"></div>
{/template}
Javascript源代码(sample.js)
goog.require('ClosureSample');
document.write(ClosureSample.SampleHtml());
$(function() {
$('.' + goog.getCssName('MyClass')).css('background-color', 'pink');
});
HTML源代码(development.htm)
<!DOCTYPE html>
<html>
<head>
<title>Closure stylesheets with External Library</title>
<link rel="Stylesheet" media="all" href="sample.css" />
<script type="text/javascript" src="sample_renaming_map.js"></script>
<script type="text/javascript" src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script type="text/javascript">
goog.require('goog.soy');
goog.require('goog.string.StringBuffer');
</script>
<script type="text/javascript" src="soyutils_usegoog.js"></script>
<script type="text/javascript" src="sample-templates.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript" src="sample.js"></script>
<div id="MyId"></div>
</body>
</html>
步骤3-编译样式表和模板
使用从模板和样式表项目下载的工具,您需要编译sample.gss
和sample.soy
文件。以下是用于此示例的命令:
java -jar closure-stylesheets.jar '
--pretty-print '
--output-file sample.css '
--output-renaming-map-format CLOSURE_UNCOMPILED '
--rename CLOSURE '
--output-renaming-map sample_renaming_map.js '
sample.gss
java -jar SoyToJsSrcCompiler.jar '
--shouldProvideRequireSoyNamespaces '
--shouldGenerateJsdoc '
--outputPathFormat {INPUT_FILE_NAME_NO_EXT}.js '
--cssHandlingScheme goog '
sample.soy
使用这些文件,您可以在开发过程中测试重命名。请参见示例。
第4步-编制生产项目
首先使用"CLOSURE_COMPLED"选项重新编译样式表以生成重命名映射:
java -jar closure-stylesheets.jar '
--output-file sample.css '
--output-renaming-map-format CLOSURE_COMPILED '
--rename CLOSURE '
--output-renaming-map sample_renaming_map.js '
sample.gss
然后,您将需要计算闭包库依赖文件,并将所有源javascript文件编译为一个源。
注意:由于jQuery与Closure编译器的ADVANCED_OPTIMIZATIONS不兼容,因此不会将其作为输入包含在内。相反,请引用Closure编译器contrib/extern文件夹中的相应jQuery extern文件
闭包库项目中的calcdeps.py脚本也可用于对其确定的输入文件调用闭包编译器。
python calcdeps.py '
-i sample.js '
-p PATH_TO_CLOSURE_LIBRARY_FOLDER '
-p sample-templates.js '
-o compiled '
-c compiler.jar '
-f --js=sample_renaming_map.js
-f --compilation_level=ADVANCED_OPTIMIZATIONS '
-f --warning_level=VERBOSE '
-f --externs=jquery-1.7-externs.js '
-f --js_output_file=sample_compiled.js
查看最终结果:编译版本。
最终注释
正如您所看到的,使用GoogleClosureStylesheets不仅需要整个Closure工具套件的一部分,而且需要相当多的内容。
- 输出HTML需要使用Google闭包模板。在这个精心设计的示例中,我使用了
document.write
调用来输出具有正确重命名的类的HTML,但是对于生产代码,还有更优雅和可维护的技术 - 闭包样式表不会重命名ID选择器,因此ID的代码不受影响
- 为了便于查看,编译后的示例引用了Google CDN之外的jQuery库。然而,将jQuery库和编译后的源代码连接到一个源JS文件中同样有效
相关文章:
- 正在使用Dropzone.js删除服务器上已重命名的文件
- Angular重命名模块后未能实例化模块
- 如何使用laravel重命名已存储在服务器中的文件
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- lodash:重命名对象中的键
- 阻止对的关闭重命名对象键
- gulp重命名多个文件
- Ckfinder在上传之前重命名图像
- 为什么 Google 闭包编译器会重命名对象的属性名称
- 使用 javascript 重命名数组中的对象键
- JSnice如何进行统计重命名,重命名Javascript变量
- 使用 gruntjs 自定义初始化任务重命名模板文件夹
- 重命名上传的文件Ruby On Rails
- 重命名动态添加或删除的表单字段
- 如何使用PHP、提交和单选按钮复制/重命名/覆盖图像
- 导出时如何重命名excel文件
- 重命名Alfresco脚本中的文件
- 我正在尝试将javascript文本框的输入保存回服务器.我想从保存的弹出文本框中获得输入,以重命名文件夹
- 在Google Drive / Google Sheet中重命名文件
- 为什么闭包编译器用google . exportsymbol重命名属性